web-dev-qa-db-fra.com

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

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

45
lajos

Utilisez NSFileManagerfileExistsAtPath:isDirectory: méthode. Voir les documents d'Apple ici .

72
Matt Dillard

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

"Il vaut bien mieux tenter une opération (comme charger un fichier ou créer un répertoire) et gérer l’erreur avec élégance que d’essayer de déterminer à l’avance si l’opération réussira. Tenter de prédire un comportement basé sur l’état actuel de le système de fichiers ou un fichier particulier sur le système de fichiers encourage un comportement étrange face aux conditions de concurrence du système de fichiers. "

13
Ryan Bavetta

[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.
10
lajos

NSFileManager est le meilleur endroit pour rechercher des 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!
}
7
rjstelling

Si vous avez un objet NSURL en tant que path, il est préférable d'utiliser chemin 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");
2
Tong Liu