2013-08-29 3 views
2

У меня есть путь, и я хочу знать, это каталог или файл. Довольно просто, но у меня проблема. Вот мой путь:Mac OS: как определить путь - это файл или каталог

NSString *file = @"file://localhost/Users/myUser/myFolder/TestFolder/"; 

или

NSString *file = @"file://localhost/Users/myUser/myFolder/my_test_file.png"; 

Вот мой код:

BOOL isDir; 


// the original code from apple documentation: 
// if ([fileManager fileExistsAtPath:file isDirectory:&isDir] && isDir) 
// but even my if returns me "not ok" in log 

if([[NSFileManager defaultManager] fileExistsAtPath:file isDirectory:&isDir]) 
{ 

    NSLog(@"directory"); 
} 
else 
{ 
    NSLog(@"not ok"); 
} 

файлов и каталоги на этих трактах являются существует, и они в порядке. Но я думаю, что проблема может быть в этом. Но я не знаю почему. Помогите мне с этим, пожалуйста.

Кстати, я получаю путь от другого метода:

NSArray *contentOfMyFolder = [[NSFileManager defaultManager] 
       contentsOfDirectoryAtURL:urlFromBookmark 
       includingPropertiesForKeys:@[NSURLContentModificationDateKey, NSURLLocalizedNameKey] 
           options:NSDirectoryEnumerationSkipsHiddenFiles 
            error:nil]; 

после этого в течение цикла, я получаю элементы, которые хранятся в массиве contentOfMyFolder и получить этот путь:

for (id item in contentOfMyFolder) { 
    NSString *path = [item absoluteString]; 
} 

Я думаю, что это вполне допустимый путь для метода fileExistsAtPath:(NSString *)path isDirectory:(BOOL)isDir

Где проблема может скрыться ?!

ответ

6

Проблема здесь:

NSString *path = [item absoluteString]; 

потому, что создает строковое представление URL, такие как

file://localhost/Users/myUser/myFolder/TestFolder/ 

, и это не то, что fileExistsAtPath: ожидает. Что вам нужно, это path метод для преобразования URL в пути:

for (NSURL *item in contentOfMyFolder) { 
    NSString *path = [item path]; 
    BOOL isDir; 
    if ([[NSFileManager defaultManager] fileExistsAtPath:path isDirectory:&isDir]) { 
     if (isDir) { 
      NSLog(@"%@ is a directory", path); 
     } else { 
      NSLog(@"%@ is a file", path); 
     } 
    } else { 
     NSLog(@"Oops, %@ does not exist?", path); 
    } 
} 

В качестве альтернативы вы можете задать URL для своей "собственности директории":

for (NSURL *item in contentOfMyFolder) { 
    NSNumber *isDir; 
    NSError *error; 
    if ([item getResourceValue:&isDir forKey:NSURLIsDirectoryKey error:&error]) { 
     if ([isDir boolValue]) { 
      NSLog(@"%@ is a directory", item); 
     } else { 
      NSLog(@"%@ is a file", item); 
     } 
    } else { 
     NSLog(@"error: %@", error); 
    } 
} 
+0

спасибо, это помогает мне! :) –

Смежные вопросы