【问题标题】:Get filepath File Open Dialog box cocoa?获取文件路径文件打开对话框可可?
【发布时间】:2011-08-15 16:54:59
【问题描述】:

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

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

    }

}

非常感谢您的帮助。

【问题讨论】:

    标签: objective-c cocoa nsopenpanel


    【解决方案1】:

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

    【讨论】:

    • 当我使用 -(NSArray )URLs 方法时,警告已删除,但我无法查看文件以获取文件内容。场景:-CASE 1 使用时,NSArray files = [openDlg filenames];我得到了这个输出: filePath = /Users/sumitgosh/Desktop/FD_TextFilesToUpload/SmallDummy Data/FirstName.txt 在读取文件内容的情况下非常有效。 -CASE 2 : 使用时,NSArray* files = [openDlg URLs]; OutPut :filePath = fileName = /Users/sumitgosh/Desktop/FD_TextFilesToUpload/SmallDummy Data/FirstName.txt 在读取文件内容的情况下不起作用。 @VenoMKO
    【解决方案2】:

    您的代码已经在处理用户选择的文件,您只是没有对它们做任何事情。

    ‑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,因此这将是首选选项。

    【讨论】:

    • runModalForDirectory:file:types: 在 OS X v10.6 中已弃用。您可以改用 runModal 。可以使用 setDirectoryURL: 设置路径,也可以使用 setAllowedFileTypes: 设置文件类型。
    【解决方案3】:

    您想使用以下代码获取文件路径

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-05
      • 2010-09-28
      • 2017-12-04
      • 2015-10-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多