在下载文件之前,请检查iPhone设备上是否有足够的空间。

8

目前我可以成功下载远程文件,

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

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

提前感谢您的帮助。

2个回答

19
+ (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; }

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


1
NSFileSystemFreeSize是由statfs()确定的。它应该给出f_bavail的值,该值声明为long而不是float。这个答案最好返回long并调用[fileSystemFreeSizeInBytes longValue]而不是floatValue。 - Adam Lockhart

8

使用这个函数:

#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
}

6
这将提供给您总空间,而不是可用空间。请使用f_bavail替换f_blocks。 - Jan Gressmann
我同意Jan Gressmann的看法,如果这是被接受的答案,它应该被更改。 - Matthew Ferguson
Edited it in as comments. - chakrit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接