2012-08-23 79 views
3

我在打開其中有空格的目錄時遇到問題。我的代碼如下所示:帶空格的OSX目錄

NSOpenPanel* openDlg = [NSOpenPanel openPanel]; 

[openDlg setCanChooseDirectories:YES]; 
if ([openDlg runModal] == NSOKButton) 
{ 

    NSArray* files = [openDlg URLs]; 

     NSString* directoryName = [[files objectAtIndex:0] absoluteString]; 
    directoryURL = [files objectAtIndex:0]; 
     NSLog(@"Directory Name: %@", directoryName); 


     NSArray *directoryArray = [directoryName componentsSeparatedByString:@"/"]; 


    NSString* currentDirectory = [directoryArray objectAtIndex:(directoryArray.count- 2)]; 

    [directoryBox setTitle:currentDirectory]; 
} 

當我選擇用空格文件沒有顯示在表中的NSLog輸出看起來像這樣一個目錄名:

目錄名稱:

file://localhost/Users/Rich/Software%20Bisque/ 

有沒有想法?

回答

4

NSURLNSOpenPanel回報實例的-URLs方法,而不是文件系統路徑。儘管NSURL已成爲引用文件的首選方式,但您可以使用NSURL-path方法輕鬆更改爲文件系統路徑。

請注意,有許多特定於使用文件系統路徑的方法,這些方法被添加到NSPathUtilities.h中的NSString。你可能可以重寫你的代碼,以合併那些(仔細檢查我有你的目標目錄好吧):

NSArray* files = [openDlg URLs]; 

NSString* directoryName = [[files objectAtIndex:0] path]; 
directoryURL = [files objectAtIndex:0]; 
NSLog(@"Directory Name: %@", directoryName); 

// NSArray *directoryArray = [directoryName pathComponents]; 

// NSString* currentDirectory = [directoryArray objectAtIndex:(directoryArray.count- 2)]; 

NSString *currentDirectory = [[directoryName stringByDeletingLastPathComponent] 
            lastPathComponent]; 

[directoryBox setTitle:currentDirectory]; 
+0

這是更正確的方向或它應該工作嗎?不幸的是,我仍然看到目錄名稱:file:// localhost/Users/Rich/Software%20Bisque /並且directoryBox標題是設置爲Rich。: -/ – Marquisk2

+0

得到它的工作!謝謝! – Marquisk2

1

您可以嘗試刪除directoryName字符串中的百分號轉義符 - 我不認爲系統需要它們。喜歡的東西:

directoryName = [directoryName stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
+0

我希望這會工作,但仍然沒有運氣。 :-( – Marquisk2