【问题标题】:check enough space on iphone device before downloading files在下载文件之前检查 iphone 设备上是否有足够的空间
【发布时间】:2011-03-15 10:35:53
【问题描述】:

现在我可以成功下载远程文件了,

但这只有在用户选择多个文件名并按下下载时用户可以选择一个文件。因此,在下载文件之前,我想检查 iphone 上是否有足够的空间,如果是,则下载,如果没有,则用户可以看到消息框“空间不足”,他将取消选中几个文件名,然后他可以从服务器下载文件...

有没有办法在下载前检查可用空间?

提前谢谢你

【问题讨论】:

    标签: iphone objective-c ios memory download


    【解决方案1】:
    + (long long)getFreeSpace {  
    long long freeSpace = 0.0f;  
    NSError *error = nil;  
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);  
    NSDictionary *dictionary = [[NSFileManager defaultManager] attributesOfFileSystemForPath:[paths lastObject] error: &error];  
    
    if (dictionary) {  
        NSNumber *fileSystemFreeSizeInBytes = [dictionary objectForKey: NSFileSystemFreeSize];  
        freeSpace = [fileSystemFreeSizeInBytes longLongValue];  
    } else { 
      //Handle error
    }  
    return freeSpace; }
    

    使用此代码查询文件系统的可用空间。

    【讨论】:

    • NSFileSystemFreeSize 由 statfs() 确定。它应该给出 f_bavail 的值,它被声明为 long 而不是 float。这个答案最好返回 long 并调用 [fileSystemFreeSizeInBytes longValue] 而不是 floatValue。
    【解决方案2】:

    使用此功能:

    #include <sys/param.h>  
    #include <sys/mount.h>  
    
    +(float) diskSpace {  
        NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);  
        struct statfs tStats;  
        statfs([[paths lastObject] cString], &tStats);  
        float total_space = (float)(tStats.f_blocks * tStats.f_bsize);  
    
        return total_space;  
    
        // for freespace:
        // float free_space = (float)(tStats.f_bavail * tStats.f_bsize);
        // return free_space
    }
    

    【讨论】:

    • 这会给你总空间,不是免费的。用 f_bavail 替换 f_blocks
    • 我同意 Jan Gressmann 的观点,如果是例外答案,应该更改。
    • 将其编辑为 cmets。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-31
    相关资源
    最近更新 更多