2011-08-15 3 views
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]; 

    } 

} 

도움을 주셔서 감사합니다.

답변

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 메서드를 사용해야합니다. NSString 배열이 아닌 NSURL 개의 파일 배열을 반환합니다. Snow Leopard의 모든 파일 처리 API가 URL을 수정하기 위해 수정 되었기 때문에 이것이 선호되는 옵션입니다.

+0

runModalForDirectory : file : types : OS X v10.6에서는 더 이상 사용되지 않습니다. runModal을 대신 사용할 수 있습니다. setDirectoryURL :을 사용하여 경로를 설정할 수 있으며 setAllowedFileTypes :를 사용하여 fileTypes를 설정할 수 있습니다. – Itachi

5

filenames 대신 - (NSArray *)URLs 메서드를 사용하십시오.

+0

을 사용하여 파일 경로를 얻으려면 - 제거 경고 (있는 NSArray *) URL을 방법을,하지만 난 파일 내용을 얻을 파일로 볼 수 없습니다입니다. 시나리오 : 사례 -1 NSArray * files = [openDlg filenames]; 파일 내용을 읽는 경우에 완벽하게 작동하는 filePath =/Users/sumitgosh/Desktop/FD_TextFilesToUpload/SmallDummy Data/FirstName.txt 이 출력이 표시됩니다. 사례 -2 : NSArray * 파일을 사용할 때 [openDlg URLs]; OutPut : filePath = fileName =/Users/sumitgosh/Desktop/FD_TextFilesToUpload/SmallDummy Data/FirstName.txt 파일의 내용을 읽는 경우 작동하지 않습니다. @VenoMKO – NSExpression

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