68 votes

Comment obtenir la taille d'un fichier à partir d'un chemin ?

J'ai un chemin d'accès à un fichier contenu dans une NSString. Existe-t-il une méthode pour obtenir la taille du fichier ?

137voto

Oded Ben Dov Points 4465

Cette phrase peut aider les gens :

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

Cela renvoie la taille du fichier en octets.

2 votes

J'aime bien celui-là. Mais quelle est la mesure en octets, en Ko, etc. ? Merci aussi.

7 votes

Bytes - la mesure est en bytes

0 votes

Que se passe-t-il si votre fichier est plus grand que INT_MAX d'octets ? Vous pourriez vouloir convertir le résultat en size_t ou unsigned long long int qui permet de rendre compte avec précision de la taille des fichiers volumineux (> 2 Go).

74voto

Frank Shearar Points 12481

Gardez à l'esprit que fileAttributesAtPath:traverseLink : est déprécié à partir de Mac OS X v10.5. Utilisez attributesOfItemAtPath:error: au lieu de cela, décrite à la même URL les mentions de thesamet.

En tenant compte du fait que je suis un débutant en Objective-C, et que j'ignore les erreurs qui pourraient se produire en appelant attributesOfItemAtPath:error: vous pouvez faire ce qui suit :

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

2 votes

Ce code fait fuir le FileManager alloué. Je vous recommande d'utiliser simplement le singleton NSFileManager.defaultManager pour éviter cela.

24voto

thesamet Points 2480

12voto

Parag Bafna Points 10462

Le CPU se lève avec attributesOfItemAtPath:error :
Vous devez 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);

0 votes

Ne devriez-vous pas utiliser fileSystemRepresentation plutôt que UTF8String ici ?

0 votes

Vous avez raison. HFS+ définit une décomposition Unicode standard ("décomposition canonique") pour les noms de fichiers. Il n'est pas garanti que -UTF8String renvoie la bonne composition ; -fileSystemRepresentation l'est. 1

0 votes

@ParagBafna Je sais que c'est un vieux fil de discussion mais savez-vous comment je pourrais utiliser la stat structure dans swift ?

6voto

Apollo Points 371

Suite à la réponse d'Oded Ben Dov, je préfère utiliser un objet ici :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X