Ich habe einen Pfad zur Datei in einem NSString. Gibt es eine Methode, um die Dateigröße zu ermitteln?
objective-c
cocoa
macos
Hekevintran
quelle
quelle
INT_MAX
Bytes ist? Möglicherweise möchten Sie das Ergebnis insize_t
oderunsigned long long int
umwandeln, um eine genaue Berichterstattung über die Größe großer Dateien (> 2 GB) zu ermöglichen.unsigned long long
,int
ist also nicht geeignet, hier zu sein.Beachten Sie, dass fileAttributesAtPath: traverseLink: ab Mac OS X 10.5 veraltet ist. Verwenden Sie
attributesOfItemAtPath:error:
stattdessen unter der gleichen URL die gleichen Erwähnungen.Mit der Einschränkung, dass ich ein Objective-C-Neuling bin und Fehler ignoriere, die beim Aufrufen auftreten können
attributesOfItemAtPath:error:
, können Sie Folgendes tun:NSString *yourPath = @"Whatever.txt"; NSFileManager *man = [NSFileManager defaultManager]; NSDictionary *attrs = [man attributesOfItemAtPath: yourPath error: NULL]; UInt32 result = [attrs fileSize];
quelle
Für den Fall, dass jemand eine Swift-Version benötigt:
let attr: NSDictionary = try! NSFileManager.defaultManager().attributesOfItemAtPath(path) print(attr.fileSize())
quelle
CPU löst mit attributeOfItemAtPath aus: 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);
quelle
stat
Struktur schnell verwenden kann?Wenn Sie nur Dateigröße mit Bytes möchten, verwenden Sie einfach,
unsigned long long fileSize = [[[NSFileManager defaultManager] attributesOfItemAtPath:yourAssetPath error:nil] fileSize];
NSByteCountFormatter- Zeichenfolgenkonvertierung der Dateigröße (aus Bytes) mit präzisen KB, MB, GB ... Die Rückgabe erfolgt wie
120 MB
oder120 KB
NSError *error = nil; NSDictionary *attrs = [[NSFileManager defaultManager] attributesOfItemAtPath:yourAssetPath error:&error]; if (attrs) { NSString *string = [NSByteCountFormatter stringFromByteCount:fileSize countStyle:NSByteCountFormatterCountStyleBinary]; NSLog(@"%@", string); }
quelle
Nach der Antwort von Oded Ben Dov würde ich hier lieber ein Objekt verwenden:
NSNumber * mySize = [NSNumber numberWithUnsignedLongLong:[[[NSFileManager defaultManager] attributesOfItemAtPath:someFilePath error:nil] fileSize]];
quelle
Swift 2.2:
do { let attr: NSDictionary = try NSFileManager.defaultManager().attributesOfItemAtPath(path) print(attr.fileSize()) } catch { print(error) }
quelle
Es gibt Dateigröße in Byte ...
uint64_t fileSize = [[[NSFileManager defaultManager] attributesOfItemAtPath:_filePath error:nil] fileSize];
quelle
Swift4:
let attributes = try! FileManager.default.attributesOfItem(atPath: path) let fileSize = attributes[.size] as! NSNumber
quelle
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)") }
quelle