2011-03-15 59 views
7

之前,現在我能夠成功下載遠程文件,檢查iphone設備上有足夠的空間下載文件

但這僅僅是如果用戶可以選擇一個文件,如果用戶選擇多個文件名,然後按下載。所以下載文件之前,我想檢查是否有足夠的空間在iphone上,如果是的話,然後下載,如果沒有,那麼用戶可以看到消息框「沒有足夠的空間」,他將取消選中一些文件名,然後他可以從服務器上下載文件...

有沒有什麼辦法在下載前檢查空閒空間?

預先感謝您

回答

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 – 2011-12-10 01:57:30

+0

我同意Jan Gressmann,如果它是例外答案,應該改變。 – 2014-08-15 23:25:28

+0

作爲評論編輯它。 – chakrit 2014-10-01 12:16:49

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。 – 2013-06-18 19:10:30

+0

感謝您的提示,@AdamLockhart。我會更新答案。 – 2013-10-09 13:09:20

+0

這一個更快... – Morkrom 2014-01-16 18:27:15

相關問題