2011-09-19 261 views
1

我讓用戶從NSOpenPanel中選擇一個文件夾。這將返回一個文件路徑,如:file:// localhost/Folder。這裏是我的代碼在那裏一切都錯了:從文件夾獲取文件時出錯,識別文件夾時出錯。 (目標c)

NSURL *filePath = [openDlg URL]; //OpenDlg is my NSOpenPanel 
NSString *s = [filePath absoluteString]; 
NSLog(@"%@",s); 
NSError *error; 
NSArray *b = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:s error:&error]; 
if (error) { 
    NSLog(@"%@",error); 
} 
NSLog(@"%lu",b.count); 

在這裏,無論我選擇哪個文件夾,發送此錯誤信息:文件夾「文件夾」不存在「的UserInfo = {0x10518b320 = NSFilePath文件。 :// localhost/Folder,NSUserStringVariant =( Folder ),NSUnderlyingError = 0x10515d5e0「操作無法完成。 (OSStatus錯誤-43)。「}

這是怎麼回事?!?如果不這樣做我怎麼可以訪問的文件夾內的所有文件?

回答

0

最好的辦法嘗試使用此方法來代替:

- (NSArray *)contentsOfDirectoryAtURL:(NSURL *)url includingPropertiesForKeys:(NSArray *)keys options:(NSDirectoryEnumerationOptions)mask error:(NSError **)error 

你可以只通過在NSURL,而無需將其轉換成的NSString給你,你會如何使用它的一個例子,請看下圖:

[[NSFileManager defaultManager] contentsOfDirectoryAtURL:filePathURL 
           includingPropertiesForKeys:[NSArray arrayWithObjects:NSURLNameKey, nil] 
               options:NSDirectoryEnumerationSkipsHiddenFiles 
                error:&error]; 

我可以看不出你如何設置你[R NSOpenPanel所以我也將包括如何設置瞭如下的例子:

NSOpenPanel *openPanel = [NSOpenPanel openPanel]; 

[openPanel beginSheetModalForWindow:self.window completionHandler:^(NSInteger result){ 

     if (result == NSFileHandlingPanelOKButton) { 
      NSArray* urls = [openPanel URLs]; 

      NSURL *url = [urls objectAtIndex:0]; 
      if (url != nil) { 

       // If you want to convert the path to a NSString 
       self.filePathString = [url path]; 
       // If you want to keep the path as a NSURL 
       self.filePathURL = url; 

      } 

     } 

    }]; 

用戶按下OK按鈕後,上面的方法將得到的文件或文件夾的路徑。試一下,看看它是否有效。爲了進一步闡述爲什麼我建議你使用NSURL,下面是Apple文檔給出的解釋:

指定文件或目錄位置的首選方法是使用NSURL類。儘管NSString類有許多與創建路徑相關的方法,但URLs提供了一種更強大的方法來定位文件和目錄。對於也適用於網絡資源的應用程序,URL也意味着您可以使用一種類型的對象來管理位於本地文件系統或網絡服務器上的項目。

+0

謝謝!這工作。 – Drenguin