Votre solution est correcte, même si Apple inclut une remarque importante au sein d' NSFileManager.h
:
/* The following methods are of limited utility. Attempting to predicate behavior
based on the current state of the filesystem or a particular file on the
filesystem is encouraging odd behavior in the face of filesystem race conditions.
It's far better to attempt an operation (like loading a file or creating a
directory) and handle the error gracefully than it is to try to figure out ahead
of time whether the operation will succeed. */
- (BOOL)fileExistsAtPath:(NSString *)path;
- (BOOL)fileExistsAtPath:(NSString *)path isDirectory:(BOOL *)isDirectory;
- (BOOL)isReadableFileAtPath:(NSString *)path;
- (BOOL)isWritableFileAtPath:(NSString *)path;
- (BOOL)isExecutableFileAtPath:(NSString *)path;
- (BOOL)isDeletableFileAtPath:(NSString *)path;
Essentiellement, si plusieurs threads/processus sont en train de modifier le système de fichiers simultanément, l'état peut changer entre les appelant fileExistsAtPath:isDirectory:
et en appelant createDirectoryAtPath:withIntermediateDirectories:
, de sorte qu'il est superflu et peut-être dangereux pour appeler fileExistsAtPath:isDirectory:
dans ce contexte.
Pour répondre à vos besoins et au sein de la portée limitée de votre question, il probablement ne serait pas un problème, mais la solution suivante est à la fois plus simple et offre moins de chance de futurs problèmes découlant:
NSFileManager *fileManager= [NSFileManager defaultManager];
NSError *error = nil;
if(![fileManager createDirectoryAtPath:directory withIntermediateDirectories:YES attributes:nil error:&error]) {
// An error has occurred, do something to handle it
NSLog(@"Failed to create directory \"%@\". Error: %@", directory, error);
}
Notez également de la documentation d'Apple:
Valeur De Retour
OUI si le répertoire a été créé, OUI si createIntermediates est réglé
et le répertoire existe déjà), ou PAS si une erreur s'est produite.
Donc, paramètre createIntermediates
de YES
, qui vous le font déjà, est de facto vérifier si le répertoire existe déjà.