2009-05-02 12 views

उत्तर

73

ध्यान रखें कि फ़ाइल एट्रिब्यूट्सएपपाथ: ट्रैवर्सलिंक: मैक ओएस एक्स v10.5 के रूप में बहिष्कृत है। attributesOfItemAtPath:error: का उपयोग करें, same URL थीसमेट उल्लेखों में वर्णित है।

चेतावनी के साथ

है कि मैं एक ऑब्जेक्टिव-सी नौसिखिया हूँ, और मैं त्रुटियों कि attributesOfItemAtPath:error: बुला में हो सकता है की अनदेखी कर रहा हूँ, आप निम्न कर सकते हैं:

NSString *yourPath = @"Whatever.txt"; 
NSFileManager *man = [NSFileManager defaultManager]; 
NSDictionary *attrs = [man attributesOfItemAtPath: yourPath error: NULL]; 
UInt32 result = [attrs fileSize]; 
+2

यह कोड आवंटित फ़ाइल प्रबंधक को लीक करता है। मैं आपको इस से बचने के लिए बस NSFileManager.defaultManager सिंगलटन का उपयोग करने की सलाह देता हूं। –

122

यह एक लाइनर लोगों की मदद कर सकते हैं:

unsigned long long fileSize = [[[NSFileManager defaultManager] attributesOfItemAtPath:someFilePath error:nil] fileSize]; 

यह फ़ाइल आकार बाइट्स में देता है।

+2

मुझे यह पसंद है। लेकिन इसमें क्या माप है? बाइट्स, केबी, आदि? धन्यवाद। – James

+6

बाइट्स - माप बाइट –

+0

ठीक है, धन्यवाद। बहुत सराहना की। – James

10

CPU raises with attributesOfItemAtPath:error:
आपको stat का उपयोग करना चाहिए।

#import <sys/stat.h> 

struct stat stat1; 
if(stat([inFilePath fileSystemRepresentation], &stat1)) { 
     // something is wrong 
} 
long long size = stat1.st_size; 
printf("Size: %lld\n", stat1.st_size); 
+0

से ऊपर तय किया गया है, क्या आप यहां UTF8String के बजाय फ़ाइल सिस्टम सिस्टम का उपयोग नहीं कर रहे हैं? –

+0

आप सही हैं। एचएफएस + फाइलनामों के लिए एक मानक यूनिकोड अपघटन ("कैननिकल अपघटन") परिभाषित करता है। -UTF8String उचित संरचना वापस करने की गारंटी नहीं है; -फाइल सिस्टमप्रणालीकरण है। [1] (http://cocoadev.com/wiki/StringWithCString) –

+0

@ParagBafna मुझे पता है कि यह एक पुराना धागा है, लेकिन क्या आप जानते हैं कि मैं तेजी से 'stat' संरचना का उपयोग कैसे कर सकता हूं? –

6

Oded बेन डोव से जवाब के बाद, मैं नहीं बल्कि यहाँ एक वस्तु का प्रयोग करेंगे:

NSNumber * mySize = [NSNumber numberWithUnsignedLongLong:[[[NSFileManager defaultManager] attributesOfItemAtPath:someFilePath error:nil] fileSize]]; 
17

मामले में कुछ एक एक स्विफ्ट संस्करण की आवश्यकता है:

let attr: NSDictionary = try! NSFileManager.defaultManager().attributesOfItemAtPath(path) 
print(attr.fileSize()) 
2

स्विफ्ट 2.2:

do { 
    let attr: NSDictionary = try NSFileManager.defaultManager().attributesOfItemAtPath(path) 
    print(attr.fileSize()) 
} catch { 
     print(error) 
} 
1

यह बाइट में फ़ाइल का आकार देगा। ..

uint64_t fileSize = [[[NSFileManager defaultManager] attributesOfItemAtPath:_filePath error:nil] fileSize]; 
3

आप केवल फ़ाइल आकार के साथ बाइट्स सिर्फ उपयोग करना चाहते हैं, सटीक KB, MB, GB के साथ फ़ाइल आकार (बाइट्स से) की

unsigned long long fileSize = [[[NSFileManager defaultManager] attributesOfItemAtPath:yourAssetPath error:nil] fileSize]; 

NSByteCountFormatter स्ट्रिंग रूपांतरण ... इसका रिटर्न जैसे 120 MB या 120 KB

NSError *error = nil; 
NSDictionary *attrs = [[NSFileManager defaultManager] attributesOfItemAtPath:yourAssetPath error:&error]; 
if (attrs) { 
    NSString *string = [NSByteCountFormatter stringFromByteCount:fileSize countStyle:NSByteCountFormatterCountStyleBinary]; 
    NSLog(@"%@", string); 
} 
0

Swift4:

 let attributes = try! FileManager.default.attributesOfItem(atPath: path) 
     let fileSize = attributes[.size] as! NSNumber 
संबंधित मुद्दे