3

スペースが含まれているディレクトリを開く際に問題が発生しました。私のコードは次のようになります:

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

2 に答える 2

4

-URLsメソッドは、ファイルシステムパスではなく、のNSOpenPanelインスタンスを返します。NSURLsはファイルを参照するための推奨される方法になりましたが、のメソッドNSURLを使用してファイルシステムパスに簡単に変更できます。NSURL-path

NSStringに追加されたファイルシステムパスの操作に固有の方法が多数あることに注意してくださいNSPathUtilities.h。あなたはおそらくそれらを組み込むためにあなたのコードを書き直すことができます(私があなたのターゲットディレクトリを持っていることを再確認してください):

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];
于 2012-08-23T16:25:19.693 に答える
1

文字列内のパーセントエスケープを削除してみることができdirectoryNameます-システムがそこにそれらを必要としないと思います。何かのようなもの:

directoryName = [directoryName stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
于 2012-08-23T16:00:27.423 に答える