Ich habe einen Pfad zur Datei in einem NSString. Gibt es eine Methode, um die Dateigröße zu ermitteln?
Ich habe einen Pfad zur Datei in einem NSString. Gibt es eine Methode, um die Dateigröße zu ermitteln?
Antworten:
Dieser eine Liner kann Menschen helfen:
unsigned long long fileSize = [[[NSFileManager defaultManager] attributesOfItemAtPath:someFilePath error:nil] fileSize];
Dies gibt die Dateigröße in Bytes zurück.
INT_MAX
Bytes ist? Möglicherweise möchten Sie das Ergebnis in size_t
oder unsigned 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];
Für den Fall, dass jemand eine Swift-Version benötigt:
let attr: NSDictionary = try! NSFileManager.defaultManager().attributesOfItemAtPath(path)
print(attr.fileSize())
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);
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 wie120 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);
}
Es gibt Dateigröße in Byte ...
uint64_t fileSize = [[[NSFileManager defaultManager] attributesOfItemAtPath:_filePath error:nil] fileSize];
Swift4:
let attributes = try! FileManager.default.attributesOfItem(atPath: path)
let fileSize = attributes[.size] as! NSNumber
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)")
}