2011-03-15 14 views
7

से पहले अभी मैं दूरस्थ फ़ाइलों को सफलतापूर्वक डाउनलोड करने के लिए,जांच 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 –

+0

के साथ f_blocks को बदलें, मैं जन Gressmann से सहमत हूं, अगर इसे छोड़ दिया गया जवाब बदल दिया जाना चाहिए। –

+0

इसे टिप्पणियों के रूप में संपादित किया गया। – chakrit

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 के लिए मान देना चाहिए, जिसे फ्लोट के बजाए लंबे समय तक घोषित किया जाता है। यह जवाब लंबे समय तक लौटने के लिए बेहतर होगा और फ़्लोट वैल्यू के बजाय [फाइलसिस्टमफ्रीसाइजइनबाइट्स लंबी वैल्यू] कॉल करें। –

+0

टिप के लिए धन्यवाद, @AdamLockhart। मैं जवाब अपडेट करूंगा। –

+0

यह एक तेज़ है ... – Morkrom

संबंधित मुद्दे