【问题标题】:OSX directory with spaces带空格的 OSX 目录
【发布时间】:2012-08-23 15:55:23
【问题描述】:

我在打开包含空格的目录时遇到问题。我的代码如下所示:

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/

有什么想法吗?

【问题讨论】:

    标签: objective-c macos file-io directory


    【解决方案1】:

    NSOpenPanel-URLs 方法返回 NSURL 的实例,而不是文件系统路径。虽然NSURLs 已成为引用文件的首选方式,但您可以使用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];
    

    【讨论】:

    • 这更像是朝着正确的方向推进还是应该按原样工作?不幸的是,我仍然看到目录名称:file://localhost/Users/Rich/Software%20Bisque/ 并且 directoryBox Title 设置为 Rich。 :-/
    【解决方案2】:

    您可以尝试删除directoryName 字符串中的百分比转义 - 我认为系统不需要它们。比如:

    directoryName = [directoryName stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-04
      • 2019-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-19
      • 2012-08-15
      相关资源
      最近更新 更多