2009-05-02 18 views

Respuesta

73

Tenga en cuenta que fileAttributesAtPath: traverseLink: está en desuso desde Mac OS X v10.5. Use attributesOfItemAtPath:error: en su lugar, descrito en same URL thesamet mentions.

Con la advertencia de que soy un novato de Objective-C, y estoy haciendo caso omiso de los errores que podrían ocurrir en llamar attributesOfItemAtPath:error:, puede hacer lo siguiente:

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

Este código filtra el FileManager asignado. Te recomiendo que simplemente uses NSFileManager.defaultManager Singleton para evitar esto. –

122

Este revestimiento puede ayudar a la gente:

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

Esto devuelve el tamaño del archivo en Bytes.

+2

Me gusta este. Pero, ¿en qué medida está esto? bytes, Kb, etc.? Gracias también. – James

+6

bytes - la medida es bytes –

+0

Ok, gracias. Muy apreciado. – James

10

CPU raises with attributesOfItemAtPath:error:
Debe usar 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

¿No debería estar utilizando fileSystemRepresentation en lugar de UTF8String aquí? –

+0

Tienes razón. HFS + define una descomposición Unicode estándar ("descomposición canónica") para nombres de archivos. -UTF8String no garantiza devolver la composición correcta; -fileSystemRepresentation es. [1] (http://cocoadev.com/wiki/StringWithCString) –

+0

@ParagBafna Sé que este es un hilo viejo, pero ¿sabes cómo podría usar la estructura 'stat' en poco tiempo? –

6

Tras la respuesta de Oded Ben Dov, prefiero utilizar un objeto aquí:

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

En caso de que alguien necesita una versión Swift:

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

Swift 2.2:

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

Dará tamaño de archivo en Byte. ..

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

Si desea que sólo el tamaño de archivo con bytes sólo tiene que utilizar,

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

NSByteCountFormatter de conversión serie de tamaño del archivo (de Bytes) con precisión KB, MB, GB ... Sus rendimientos como 120 MB o 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 
Cuestiones relacionadas