2013-08-29 64 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"); 
} 

文件,迪爾斯這個pathes是存在的,他們都OK。但我認爲問題可能在其中。但我不知道爲什麼。請幫助我。

順便說一句,我得到的路徑從另一種方法:

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

這在for循環後,我得到的存儲陣列contentOfMyFolder 項目,並得到這樣的路徑:

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

我認爲這是完全有效的方法fileExistsAtPath:(NSString *)path isDirectory:(BOOL)isDir

問題可以隱藏的地方?!

回答

6

的問題是在這裏:

NSString *path = [item absoluteString]; 

因爲用於創建網址的字符串表示,如

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

謝謝,這有助於我! :) –

相關問題