2012-05-23 12 views
5

मैं फ़ोल्डर्स द्वारा अलग स्थानीय दस्तावेज़ निर्देशिका में फ़ाइलों को संग्रहीत कर रहा हूं। क्या मेरे पास दस्तावेज़ निर्देशिका की सामग्री का आकार और आईफोन पर सभी उप-निर्देशिकाएं प्राप्त करने का कोई आसान तरीका है?आईओएस रिकर्सिव फ़ोल्डर आकार

मैं मैन्युअल रूप से फ़ोल्डर्स पर पुन: सक्रिय कर सकता हूं और फ़ाइल आकार जोड़ना जारी रख सकता हूं, लेकिन मुझे उम्मीद है कि कुछ क्लीनर और अधिक कुशल है।

धन्यवाद!

+1

डिस्क पर एक निर्देशिका ले जाने वाले आकार की गणना वास्तव में थोड़ा अधिक शामिल है। एक ही प्रश्न के लिए [इस उत्तर] में कैसे जाएं (http://stackoverflow.com/a/28660040/104790)। –

उत्तर

4

आप रिकर्सिवली सभी फ़ोल्डर पर जाने और आकार प्राप्त कर सकते हैं। इस तरह:

+(NSUInteger)getDirectoryFileSize:(NSURL *)directoryUrl 
{ 
    NSUInteger result = 0; 
    NSArray *properties = [NSArray arrayWithObjects: NSURLLocalizedNameKey, 
          NSURLCreationDateKey, NSURLLocalizedTypeDescriptionKey, nil]; 

    NSArray *array = [[NSFileManager defaultManager] 
         contentsOfDirectoryAtURL:directoryUrl 
         includingPropertiesForKeys:properties 
         options:(NSDirectoryEnumerationSkipsHiddenFiles) 
         error:nil]; 

    for (NSURL *fileSystemItem in array) { 
     BOOL directory = NO; 
     [[NSFileManager defaultManager] fileExistsAtPath:[fileSystemItem path] isDirectory:&directory]; 
     if (!directory) { 
      result += [[[[NSFileManager defaultManager] attributesOfItemAtPath:[fileSystemItem path] error:nil] objectForKey:NSFileSize] unsignedIntegerValue]; 
     } 
     else { 
      result += [CacheManager getDirectoryFileSize:fileSystemItem]; 
     } 
    } 

    return result; 
} 
3

दृष्टिकोण और दक्षता अलग-अलग आईओएस संस्करण पर निर्भर करती है। आईओएस 4.0 के लिए और बाद में आप कुछ इस तरह के साथ NSFileManager पर एक वर्ग बना सकते हैं:

- (unsigned long long)contentSizeOfDirectoryAtURL:(NSURL *)directoryURL 
{ 
    unsigned long long contentSize = 0; 
    NSDirectoryEnumerator *enumerator = [self enumeratorAtURL:directoryURL includingPropertiesForKeys:[NSArray arrayWithObject:NSURLFileSizeKey] options:NSDirectoryEnumerationSkipsHiddenFiles errorHandler:NULL]; 
    NSNumber *value = nil; 
    for (NSURL *itemURL in enumerator) { 
     if ([itemURL getResourceValue:&value forKey:NSURLFileSizeKey error:NULL]) { 
      contentSize += value.unsignedLongLongValue; 
     } 
    } 
    return contentSize; 
} 
संबंधित मुद्दे