2012-08-23 82 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