J'ai un chemin d'accès au fichier contenu dans un NSString. Existe-t-il une méthode pour obtenir sa taille de fichier?
Cette doublure peut aider les gens:
unsigned long long fileSize = [[[NSFileManager defaultManager] attributesOfItemAtPath:someFilePath error:nil] fileSize];
Cela retourne la taille du fichier en octets.
Notez que fileAttributesAtPath: traverseLink: est obsolète à partir de Mac OS X v10.5. Utilisez plutôt attributesOfItemAtPath:error:
, décrit à l’adresse même URL indiquée par le serveur.
Avec l'avertissement que je suis un débutant d'Objective-C et que j'ignore les erreurs pouvant survenir lors de l'appel de attributesOfItemAtPath:error:
, vous pouvez procéder comme suit:
NSString *yourPath = @"Whatever.txt";
NSFileManager *man = [NSFileManager defaultManager];
NSDictionary *attrs = [man attributesOfItemAtPath: yourPath error: NULL];
UInt32 result = [attrs fileSize];
Au cas où quelqu'un aurait besoin d'une version de Swift:
let attr: NSDictionary = try! NSFileManager.defaultManager().attributesOfItemAtPath(path)
print(attr.fileSize())
La CPU soulève avec attributesOfItemAtPath: error:
Vous devriez utiliser 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);
Suite à la réponse de Oded Ben Dov, je préférerais utiliser un objet ici:
NSNumber * mySize = [NSNumber numberWithUnsignedLongLong:[[[NSFileManager defaultManager] attributesOfItemAtPath:someFilePath error:nil] fileSize]];
Si vous voulez seulement utiliser une taille de fichier avec des octets,
unsigned long long fileSize = [[[NSFileManager defaultManager] attributesOfItemAtPath:yourAssetPath error:nil] fileSize];
NSByteCountFormatter conversion de la taille de fichier (à partir d'octets) en chaîne avec KB, Mo, Go ... Ses retours sont comme 120 MB
ou 120 KB
NSError *error = nil;
NSDictionary *attrs = [[NSFileManager defaultManager] attributesOfItemAtPath:yourAssetPath error:&error];
if (attrs) {
NSString *string = [NSByteCountFormatter stringFromByteCount:fileSize countStyle:NSByteCountFormatterCountStyleBinary];
NSLog(@"%@", string);
}
Swift 2.2:
do {
let attr: NSDictionary = try NSFileManager.defaultManager().attributesOfItemAtPath(path)
print(attr.fileSize())
} catch {
print(error)
}
Il donnera la taille du fichier en octet ...
uint64_t fileSize = [[[NSFileManager defaultManager] attributesOfItemAtPath:_filePath error:nil] fileSize];
Dans Swift 3.x et versions ultérieures, vous pouvez utiliser:
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)")
}
Swift4:
let attributes = try! FileManager.default.attributesOfItem(atPath: path)
let fileSize = attributes[.size] as! NSNumber