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对象的文件的路径。如果他们只选择了一个文件,则数组中将只有一个对象。如果他们没有选择任何文件,则数组将为空。

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对象数组而不是一个NSStrings 数组。由于 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 回答