web-dev-qa-db-fra.com

Comment obtenir la taille du fichier avec un chemin?

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?

66
hekevintran

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.

132
Oded Ben Dov

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];
73
Frank Shearar

Au cas où quelqu'un aurait besoin d'une version de Swift:

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

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

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]];
6
Apollo

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);
}
5
Sk Borhan Uddin

Swift 2.2:

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

Il donnera la taille du fichier en octet ... 

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

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)")
}
0
d0ping

Swift4:

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