我的应用程序中有一个文件打开对话框来选择文件,但当用户点击框中的“选择”按钮时,它显然不会做任何事情。如何从所选文件中提取文件路径?我需要文件路径,所以我可以获取要加密的文件的内容。最初,我将我将使用的文件硬编码到我的应用程序中,但这仅用于测试目的。这是我用于文件打开对话框的内容:
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];
}
}
非常感谢您的帮助。
答案 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];
}