2010-02-08 11 views
12

मैं फ़ोल्डर एनएससीएएस डायरेक्टरी i.e/लाइब्रेरी/कैश का आकार कैसे प्राप्त करूं। मैं इस फ़ोल्डर का आकार जानना चाहता हूं ताकि मैं अंततः इसे साफ़ कर सकूं।आईएससी में एनएससीएएस डायरेक्टरी का आकार

धन्यवाद।

संपादित करें: यहां मेरा कोड है।

NSDictionary *attributes = [[NSFileManager defaultManager] attributesOfItemAtPath:folderPath error:&error]; 
if (attributes != nil) { 

    if (fileSize = [attributes objectForKey:NSFileSize]) { 
     NSLog(@"size of :%@ = %qi\n",folderPath, [fileSize unsignedLongLongValue]); 
    } 

} 

जब मैं इस चलाने यह मेरी फ़ाइल आकार 768 (बाइट या KB नहीं जानता) देता है और मैं खोजक में जाँच यह मेरे फ़ोल्डर आकार 168kb पता चलता है। मुझे नहीं पता कि क्या गलत हुआ।

उत्तर

11

कुछ निम्नलिखित की तरह की मदद करनी चाहिए आरंभ:

- (unsigned long long int) cacheFolderSize { 
    NSFileManager *_manager = [NSFileManager defaultManager]; 
    NSArray *_cachePaths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); 
    NSString *_cacheDirectory = [_cachePaths objectAtIndex:0]; 
    NSArray *_cacheFileList; 
    NSEnumerator *_cacheEnumerator; 
    NSString *_cacheFilePath; 
    unsigned long long int _cacheFolderSize = 0; 

    _cacheFileList = [_manager subpathsAtPath:_cacheDirectory]; 
    _cacheEnumerator = [_cacheFileList objectEnumerator]; 
    while (_cacheFilePath = [_cacheEnumerator nextObject]) { 
     NSDictionary *_cacheFileAttributes = [_manager fileAttributesAtPath:[_cacheDirectory stringByAppendingPathComponent:_cacheFilePath] traverseLink:YES]; 
     _cacheFolderSize += [_cacheFileAttributes fileSize]; 
    } 

    return _cacheFolderSize; 
} 

संपादित

दिए गए मान लूंगा हो में बाइट्स: cf. http://developer.apple.com/mac/library/documentation/Cocoa/Reference/Foundation/Classes/NSFileManager_Class/Reference/Reference.html#//apple_ref/doc/c_ref/NSFileSize

मान लें कि आप इसे सिम्युलेटर में चला रहे हैं, तो खोजक शायद उन बाइट्स के लिए फ़ाइल ब्लॉक का उपयोग कर रहा है। वे ब्लॉक फ़ाइल डेटा से ही बड़े होंगे। ब्लॉक के बारे में जानने के लिए एचएफएस + सिस्टम पर पढ़ें: http://en.wikipedia.org/wiki/HFS_Plus

मुझे यकीन नहीं है कि आईफोन पर कौन सी फाइल सिस्टम का उपयोग किया जाता है, या डिवाइस पर फ़ाइल ब्लॉक आकार क्या होगा, इसलिए बाइट कुल होगा वही, सिम्युलेटर और डिवाइस के बीच वास्तविक डिस्क उपयोग भिन्न हो सकता है।

+0

धन्यवाद एलेक्स, मैंने अपना नमूना कोड जोड़ा है, क्या कोई तरीका है कि मैं इसे सभी फाइलों का आकलन किए बिना प्राप्त कर सकता हूं? – Nnp

+0

मुझे नहीं पता। यदि प्रदर्शन एक समस्या है, तो आप स्टार्टअप पर एक बार गणना कर सकते हैं और कैश फ़ोल्डर आकार के लिए एक आवृत्ति चर बनाए रख सकते हैं क्योंकि आइटम जोड़े और हटा दिए जाते हैं। –

+0

या आप पृष्ठभूमि थ्रेड में इसे निष्पादित कर सकते हैं क्योंकि रोब नेपियर सुझाव देते हैं। –

1

क्या आपका वास्तव में मतलब है/लाइब्रेरी/कैश, या आपका मतलब ~/लाइब्रेरी/कैश (एप्लिकेशन की कैश निर्देशिका) है। आपके पास आम तौर पर पूर्व पर कोई नियंत्रण नहीं होता है, इसलिए मुझे लगता है कि आप बाद वाले का मतलब लेंगे।

NSFileManager के -मेन्यूलेटर एटपाथ का उपयोग करें: निर्देशिका को चलाने और उपयोग करने के लिए -attributesOfItemAtPath: त्रुटि: फ़ाइल आकार लाने के लिए। मैं आपके ऐप को अवरुद्ध करने से बचने के लिए धीरे-धीरे पृष्ठभूमि थ्रेड पर ऐसा करने की अनुशंसा करता हूं।

+0

धन्यवाद रॉब, मैंने अपना नमूना कोड जोड़ा है, मैं यह नहीं समझ सकता कि यह सही है या गलत है? – Nnp

+0

विचित्र रूप से पर्याप्त है, सिस्टम कैश फ़ोल्डर (/ var/मोबाइल/लाइब्रेरी/कैश) ऐप स्टोर एप्लिकेशन द्वारा एक्सेस किया जा सकता है। – rpetrich

+0

उपरोक्त आपका कोड फ़ोल्डर आइटम का आकार दे रहा है (768 बाइट्स)। यह वह जगह है जो फ़ोल्डर में मौजूद चीज़ों का ट्रैक रखने के लिए उपयोग की जाती है, फ़ोल्डर में आइटम द्वारा आवश्यक स्थान नहीं। आपको वास्तव में उन सभी वस्तुओं के माध्यम से चलना होगा और उनके आकार को जोड़ना होगा, जैसा कि एलेक्स के कोड में है। –

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