Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c “获取文件路径文件打开”对话框?_Objective C_Cocoa_Nsopenpanel - Fatal编程技术网

Objective c “获取文件路径文件打开”对话框?

Objective c “获取文件路径文件打开”对话框?,objective-c,cocoa,nsopenpanel,Objective C,Cocoa,Nsopenpanel,我的应用程序中有一个文件打开对话框,可以从中选择文件,但是当用户单击对话框中的“选择”按钮时,它显然不会做任何事情。如何从所选文件中提取文件路径?我需要文件路径,以便可以获取要加密的文件内容。最初,我将使用的文件硬编码到我的应用程序中,但那只是出于测试目的。以下是我用于“文件打开”对话框的内容: int i; NSOpenPanel* openDlg = [NSOpenPanel openPanel]; [openDlg setCanChooseFiles:YES]; [openDlg setC

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

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

    }

}
inti;
NSOpenPanel*openDlg=[NSOpenPanel-openPanel];
[openDlg setCanChooseFiles:是];
[openDlg SetCanChoosedDirectories:是];
[openDlg setPrompt:@“选择”];
NSString*文件名=[pathAsNSString lastPathComponent];
[文件名stringByDeletingPathExtension];
if([openDlg runModalForDirectory:nil file:nil]==NSOKButton)
{
NSArray*文件=[openDlg文件名];
对于(i=0;i<[文件计数];i++)
{
[文件对象索引:i];
}
}

非常感谢您的帮助。

使用
-(NSArray*)URL
方法,而不是
文件名

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

-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]
。这样,
文件名
数组中最多有一个条目


正如@VenoMKO指出的那样,
-filenames
方法现在已被弃用,您应该改用
-url
方法。这将返回文件
NSURL
对象数组,而不是
NSString
s数组。由于Snow Leopard中几乎所有的文件处理API都修改为采用URL,因此这将是首选选项。

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

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

当我使用-(NSArray)URL方法时,警告被删除,但我无法查看文件以获取文件内容。场景:-案例1,当am使用时,NSArray文件=[openDlg文件名];我得到了这个输出:filePath=/Users/sumitgosh/Desktop/FD_TextFilesToUpload/SmallDummy Data/FirstName.txt,它在读取文件内容时非常有效-案例2:当我使用时,NSArray*文件=[openDlg URL];输出:filePath=fileName=/Users/sumitgosh/Desktop/FD_TextFilesToUpload/SmallDummy Data/FirstName.txt,在读取文件内容时不起作用@在OS X v10.6中,不推荐使用Dalfordirectory:file:types:。您可以改用runModal。您可以使用setDirectoryURL:设置路径,也可以使用setAllowedFileTypes:设置文件类型。