it-swarm.com.de

Wie erhalte ich die Dateigröße eines Pfads?

Ich habe einen Dateipfad in einem NSString. Gibt es eine Methode, um die Dateigröße zu ermitteln?

66
hekevintran

Dieser eine Liner kann den Menschen helfen:

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

Dies gibt die Dateigröße in Bytes zurück.

132
Oded Ben Dov

Beachten Sie, dass fileAttributesAtPath: traverseLink: ab Mac OS X 10.5 veraltet ist. Verwenden Sie stattdessen attributesOfItemAtPath:error:, beschrieben unter gleiche URL thesamet-Erwähnungen.

Mit dem Vorbehalt, dass ich ein Neuling in Objective-C bin und Fehler ignoriere, die beim Aufruf von attributesOfItemAtPath:error: auftreten können, können Sie Folgendes tun:

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

Falls jemand eine Swift-Version benötigt:

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

CPU steigt mit AttributeOfItemAtPath: Fehler:
Sie sollten stat verwenden.

#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);
12
Parag Bafna

Nach der Antwort von Oded Ben Dov möchte ich hier lieber ein Objekt verwenden:

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

Wenn Sie nur Dateigröße mit Bytes verwenden möchten, verwenden Sie einfach

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

NSByteCountFormatter Zeichenfolgenkonvertierung der Dateigröße (von Bytes) mit genauen KB, MB, GB ... Die Rückgabe erfolgt wie 120 MB oder 120 KB.

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

Schnell 2.2:

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

Es wird Dateigröße in Byte geben ... 

uint64_t fileSize = [[[NSFileManager defaultManager] attributesOfItemAtPath:_filePath error:nil] fileSize];
1
Akshay Phulare

In Swift 3.x und höher können Sie Folgendes verwenden:

do {
    //return [FileAttributeKey : Any]
    let attr = try FileManager.default.attributesOfItem(atPath: filePath)
    fileSize = attr[FileAttributeKey.size] as! UInt64

    //or you can convert to NSDictionary, then get file size old way as well.
    let attrDict: NSDictionary = try FileManager.default.attributesOfItem(atPath: filePath) as NSDictionary
    fileSize = dict.fileSize()
} catch {
    print("Error: \(error)")
}
0
d0ping

Swift4:

        let attributes = try! FileManager.default.attributesOfItem(atPath: path)
        let fileSize = attributes[.size] as! NSNumber
0