2012-03-30 2 views
0

MacOS X에서 NSFileManager를 사용하여 폴더를 만드는 데 문제가 있습니다. 변경 사항이 있으면 Lion에 소프트웨어를 만듭니다.NSFileManager를 사용하여 새 폴더를 만들 수있는 권한을 얻으십시오.

어쨌든. 프로그램 구조는 다음과 같습니다.

  1. 일부 필드를 채 웁니다.
  2. NSOpenPanel을 사용하여 폴더를 선택하십시오.
  3. 프로그램은 필드에서 새 폴더의 이름을 생성합니다.
  4. 선택한 폴더에 해당 이름의 폴더를 만듭니다. 내가 큰 오류 스택을 얻을 지수 6에서 문자열을하지 않으면 (16에서 찍어 보았습니다

    NSString *name = [pnameField stringValue]; 
    NSString *number = [self parseVerknr:[pnumberField stringValue]]; 
    NSString *date = [pdateField stringValue]; 
    NSString *folderName; 
    
    //Here I generate the folder name from some rules and stuffsies 
    //It ends up as something like: 13245_08 - cp. - name 
    
    NSOpenPanel *myPanel = [NSOpenPanel openPanel]; 
    
        myPanel.canChooseFiles = NO; 
        myPanel.canChooseDirectories = YES; 
        myPanel.canCreateDirectories = YES; 
    
        [myPanel beginWithCompletionHandler:^(NSInteger result){ 
    
         if (result==NSFileHandlingPanelOKButton){ 
    
          NSFileManager *myManager = [[NSFileManager alloc] init]; 
    
          NSError *merror; 
    
          NSString *directoryString = [NSString stringWithFormat:@"%@%@", [myPanel.URL absoluteString], folderName]; 
    
          //Here the directory string looks like file://localhost/Users/username/Documents/folders/12345_09 - cp. - Koop 
          directoryString = [directoryString substringFromIndex:6]; 
          //After it looks like: /localhost/Users/username/Documents/folders/12345_09 - cp. - Koop 
          NSLog(@"directory: %@", directoryString); 
    
          [myManager createDirectoryAtPath:directoryString withIntermediateDirectories:YES attributes:nil error:&merror]; 
    
          NSLog(@"%@", [merror localizedDescription]); 
         } 
    
        }]; 
    

    :

폴더를 만들 생각되는 코드는 다음과 같습니다 너무 똑같은). PK 베어 이후

You don’t have permission to save the file “localhost” in the folder “PK Bear”. 

내 "하드 드라이브"나는 프로그램이 하드 드라이브에 액세스 할 수있는 권한을 얻을 필요가 같은데요의 이름입니다 : 내가 분할 문자열을 사용하는 경우 나는 다음과 같은 오류가 발생합니다. 나는 이것을 어떻게하는지 모른다.

도움을 주시면 감사하겠습니다.

답변

1

문제는 경로 문자열을 만드는 방법입니다. 특히 -[NSURL absoluteString]은 파일 경로 문자열이 아닌 URL의 문자열 표현을 반환합니다. NSURL 및 NSString 메서드를 사용하여 경로로 작업해야합니다. documentation에서 설명한 것처럼 -[NSURL path]은 NSFileManager 메서드에 입력하기에 적합한 경로 문자열을 반환합니다.

이 시도 :

NSString *directoryString = [[myPanel.URL path] stringByAppendingPathComponent:folderName]; 
[myManager createDirectoryAtPath:directoryString withIntermediateDirectories:YES attributes:nil error:&merror]; 
+0

매력처럼 작동했습니다. 감사합니다. 이 둘의 차이점을 꼭 읽어 보겠습니다. – Bjorninn

1

당신은 (파일 -) URL 및 (유닉스) 경로를 섞는다. 다음과 같이

당신은 디렉토리 경로를 만들어야합니다 키 path 대신 absoluteString을 사용

NSString *directoryString = [[myPanel.URL path] stringByAppendingPathComponent:folderName]; 
if (! [myManager createDirectoryAtPath:directoryString withIntermediateDirectories:YES attributes:nil error:&merror]) { 
    NSLog(@"%@", [merror localizedDescription]); 
} 

.

또한 merror 개체를 만드는 메서드가 NO (또는 오류 조건이 무엇이든)을 반환하지 않으면 개체에 액세스 할 수 없습니다.

substringFromIndex:처럼 경로 문자열에서 하나의 문자를 사용해서는 안됩니다. 이것은 유니 코드 코드 포인트와 코드 조각 및 결합 된 문자에 직면 한 고급 작업으로 간주됩니다.

+0

답변 해 주셔서 감사합니다. 나는 포인터를 가져 주셔서 감사합니다. NSError 객체를 사용하는 것이 좋습니다. – Bjorninn

관련 문제