4

アプリケーションにファイルを選択するための [ファイルを開く] ダイアログ ボックスがありますが、ユーザーがボックスの [選択] ボタンをクリックしても、明らかに何もしません。選択したファイルからファイルパスを抽出するにはどうすればよいですか? 暗号化するファイルの内容を取得できるように、ファイルパスが必要です。最初に、使用するファイルをアプリケーションにハードコーディングしましたが、それはテスト目的のみでした。ファイルを開くダイアログボックスに使用しているものは次のとおりです。

int i;
NSOpenPanel* openDlg = [NSOpenPanel openPanel];
[openDlg setCanChooseFiles:YES];
[openDlg setCanChooseDirectories:YES];
[openDlg setPrompt:@"Select"];
NSString *fileName = [pathAsNSString lastPathComponent]; 
[fileName stringByDeletingPathExtension];
if ([openDlg runModalForDirectory:nil file:nil] == NSOKButton )
{
    NSArray* files = [openDlg filenames];
    for( i = 0; i < [files count]; i++ )
    {
        [files objectAtIndex:i];

    }

}

助けてくれてありがとう。

4

3 に答える 3

5

- (NSArray *)URLsの代わりにメソッドを使用しfilenamesます。

于 2011-08-15T17:11:59.320 に答える
1

あなたのコードは、ユーザーが選択したファイルを既に処理していますが、それらに対して何もしていません。

メソッドから返される配列には‑filenames、ユーザーがオブジェクトとして選択したファイルへのパスが含まれていNSStringます。ファイルを 1 つだけ選択した場合、配列内のオブジェクトは 1 つだけになります。ファイルが選択されていない場合、配列は空になります。

if ([openDlg runModalForDirectory:nil file:nil] == NSOKButton )
{
    NSArray* files = [openDlg filenames];
    for(NSString* filePath in [openDlg filenames])
    {
        NSLog(@"%@",filePath);
        //do something with the file at filePath
    }
}

ユーザーが単一のファイルを選択できるようにする[openPanel setAllowsMultipleSelection:NO]場合は、パネルを構成するときに呼び出します。そうすれば、filenames配列には最大で 1 つのエントリが存在します。

@VenoMKO が指摘しているように、この‑filenamesメソッドは廃止されたため、‑URLs代わりにメソッドを使用する必要があります。NSURLこれは、 の配列ではなく、ファイル オブジェクトの配列を返しますNSString。Snow Leopard のほとんどすべてのファイル処理 API が URL を受け取るように改訂されたため、これが推奨されるオプションになります。

于 2011-08-16T02:38:51.510 に答える
0

次のコードを使用してファイルパスを取得したい

 NSOpenPanel* openPanel = [NSOpenPanel openPanel];
                [openPanel setCanChooseFiles:YES];
                [openPanel setCanChooseDirectories:NO];
                [openPanel setAllowsMultipleSelection: NO];
                [openPanel setAllowedFileTypes:ArrExtension ];
                if ([openPanel runModal] == NSOKButton ){

                   NSString *FilePath = [NSString stringWithFormat:@"%@",[openPanel URL]];
                   [openPanel canHide];
                 }
于 2014-12-31T06:50:28.177 に答える