46 votes

Comment vérifier si un dossier existe en Cocoa & Objective-C ?

Comment vérifier si un dossier (répertoire) existe dans Cocoa en utilisant Objective-C ?

73voto

Matt Dillard Points 9040

Utilisez NSFileManager 's fileExistsAtPath:isDirectory: méthode. Voir les documents d'Apple aquí .

1 votes

Pas exactement. Parce que vous passez un pointeur à bool en tant que isDirectory . Cela signifie que s'il existe un fichier avec un tel nom, cette méthode renvoie YES et écrit NO au pointeur isDirectory .

13voto

Ryan Bavetta Points 528

Quelques bons conseils d'Apple dans le NSFileManager.h concernant la vérification du système de fichiers :

"Il est de loin préférable de tenter une opération (comme le chargement d'un fichier ou la création d'un répertoire) et de gérer l'erreur avec élégance plutôt que d'essayer de savoir à l'avance si l'opération va réussir. Tenter de prédire un comportement basé sur l'état actuel du système de fichiers ou d'un fichier particulier sur le système de fichiers encourage un comportement étrange face aux conditions de course du système de fichiers."

0 votes

Il est également mentionné dans la documentation : developer.apple.com/library/mac/documentation/Cocoa/Référence/ :

10voto

lajos Points 13791

[NSFileManager fileExistsAtPath:isDirectory :]

Returns a Boolean value that indicates whether a specified file exists.

- (BOOL)fileExistsAtPath:(NSString *)path isDirectory:(BOOL *)isDirectory

Parameters
path
The path of a file or directory. If path begins with a tilde (~), it must first be expanded with stringByExpandingTildeInPath, or this method will return NO.

isDirectory
Upon return, contains YES if path is a directory or if the final path element is a symbolic link that points to a directory, otherwise contains NO. If path doesn’t exist, the return value is undefined. Pass NULL if you do not need this information.

Return Value
YES if there is a file or directory at path, otherwise NO. If path specifies a symbolic link, this method traverses the link and returns YES or NO based on the existence of the file or directory at the link destination.

0 votes

La première ligne confond que fileExists.. est une méthode de classe. Veuillez mettre à jour la réponse. J'aurais pu le faire, mais sa réponse est trop ancienne, si vous le faites, ce sera mieux.

8voto

rjstelling Points 12180

NSFileManager est le meilleur endroit pour rechercher les API liées aux fichiers. L'API spécifique dont vous avez besoin est - fileExistsAtPath:isDirectory: .

Exemple :

NSString *pathToFile = @"...";
BOOL isDir = NO;
BOOL isFile = [[NSFileManager defaultManager] fileExistsAtPath:pathToFile isDirectory:&isDir];

if(isFile)
{
    //it is a file, process it here how ever you like, check isDir to see if its a directory 
}
else
{
    //not a file, this is an error, handle it!
}

1 votes

Cette solution ne fonctionne pas

2voto

Tong Liu Points 31

Si vous avez un NSURL en tant qu'objet path il est préférable d'utiliser path pour le convertir en NSString .

NSFileManager*fm = [NSFileManager defaultManager];

NSURL* path = [[[fm URLsForDirectory:NSDocumentDirectory 
                           inDomains:NSUserDomainMask] objectAtIndex:0]                           
                                 URLByAppendingPathComponent:@"photos"];

NSError *theError = nil;
if(![fm fileExistsAtPath:[path path]]){
    NSLog(@"dir doesn't exists");
}else
    NSLog(@"dir exists");

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