获取文件路径文件打开对话框可可?

时间:2011-08-15 16:55:00

标签: objective-c cocoa nsopenpanel

我的应用程序中有一个文件打开对话框来选择文件,但当用户点击框中的“选择”按钮时,它显然不会做任何事情。如何从所选文件中提取文件路径?我需要文件路径,所以我可以获取要加密的文件的内容。最初,我将我将使用的文件硬编码到我的应用程序中,但这仅用于测试目的。这是我用于文件打开对话框的内容:

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];

    }

}

非常感谢您的帮助。

3 个答案:

答案 0 :(得分:5)

使用- (NSArray *)URLs方法代替filenames

答案 1 :(得分:1)

您的代码已经处理了用户选择的文件,您只是没有对它们执行任何操作。

‑filenames方法返回的数组包含用户选择为NSString个对象的文件的路径。如果他们只选择了一个文件,则数组中只有一个对象。如果他们没有选择任何文件,则该数组将为空。

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数组中最多只有一个条目。

正如@VenoMKO指出的那样,‑filenames方法现已弃用,您应该使用‑URLs方法。这将返回文件NSURL对象的数组,而不是NSString的数组。由于Snow Leopard中的几乎所有文件处理API都经过修改以获取URL,因此这将是首选选项。

答案 2 :(得分: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];
                 }