Wie kann überprüft werden, ob ein Verzeichnis (Verzeichnis) in Cocoa mit Objective-C existiert?Wie überprüft man, ob ein Ordner in Cocoa & Objective-C existiert?
Antwort
Verwenden Sie die Methode NSFileManager
fileExistsAtPath:isDirectory:
. Siehe Apples Dokument .
[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.
Die erste Zeile verwechselt, dass 'fileExists..' ist eine Klassenmethode. Bitte aktualisieren Sie die Antwort. Ich hätte es tun können, aber seine zu alte Antwort, wenn Sie das besser wären. –
Einige gute Ratschläge von Apple in der NSFileManager.h in Bezug auf das Dateisystem überprüft:
„Es ist viel besser, eine Operation zu versuchen (wie ein Laden Datei oder erstellen Sie ein Verzeichnis) und behandeln Sie den Fehler elegant, als zu versuchen, herauszufinden, ob die Operation erfolgreich ist. Versuch, Verhalten basierend auf dem aktuellen Status des Dateisystems oder einer bestimmten Datei im Dateisystem zu prädizieren, ermutigt ungerade Verhalten angesichts der Dateisystem-Rennbedingungen. "
Es wird auch in der Dokumentation erwähnt: http://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSFileManager_Class/Reference/Reference.html#//apple_ref/occ/instm/ NSFileManager/fileExistsAtPath: – Monolo
NSFileManager ist der beste Ort, um nach dateibezogenen APIs zu suchen. Die spezifische API Sie benötigen, ist - fileExistsAtPath:isDirectory:
.
Beispiel:
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!
}
Wenn Ihr ein NSURL
Objekt als path
haben, ist es besser, Pfad zu verwenden es in NSString
zu konvertieren.
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");
Nein genau. Weil Sie einen Zeiger auf bool als 'isDirectory' übergeben. Wenn eine Datei mit einem solchen Namen vorhanden ist, gibt diese Methode YES zurück und schreibt "NO" in den Zeiger "isDirectory". – yas375
Aber alles ist eine Datei in Unix. – uchuugaka