2010-07-26 2 views
4

기존 iPhone 응용 프로그램의 새 기능을 작업하고 있으며 응용 프로그램의 로컬 "Documents"폴더에 여러 개의 새 디렉토리를 만들려고합니다. 나는 성공적으로 권장되는 방법을 사용하여 이런 짓을했는지 :NSFileManager를 사용한 부적절한 반환 값 createDirectoryAtPath :

반환 값 :

[NSFileManager createDirectoryAtPath:withIntermediateDirectories:attributes:error:] 

이 방법에 대한 설명서를 읽고, 나는 애플의 공식 documentation에 나열된 리턴 값에 관심 된 YES를하는 경우 작업은 그렇지 않으면이

내 응용 프로그램이 시작될 때마다, 내가 좋아하는 것, 이미이 존재 성공하지 디렉토리가 제자리에 있는지 확인하십시오. 이 일을하는 영리한 방법은 각 시작마다 createDirectory : 메서드를 호출하고 메서드의 반환 값을 이용하는 것이라고 생각했습니다. 어떤 이유로 디렉토리가 누락되면 디렉토리가 작성됩니다. 디렉토리가 이미있는 경우 반환 값은 여전히 ​​이됩니다. 그러면 NO 반환 값을 추가 복구/복구 논리의 플래그로 사용할 수 있습니다.

불행히도 Apple의 설명서와 일치하지 않는 결과를 얻는 것으로 보입니다. 이 방법은 디렉토리가 이미 존재하는 경우 NO을 반환합니다. Apple의 문서에서이 경우 을 반환해야한다고 말한 경우입니다.

#import <Foundation/Foundation.h> 

int main (int argc, const char * argv[]) { 

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 

NSFileManager * fm = [NSFileManager defaultManager]; 
bool testDirectoryCreated = NO; 

testDirectoryCreated = [[NSFileManager defaultManager]createDirectoryAtPath: [NSString stringWithFormat:@"%@/%@",[fm currentDirectoryPath],@"TestDirectory"] 
               withIntermediateDirectories: NO 
                   attributes: nil 
                     error: NULL]; 

NSLog(@"TestDirectory Created: %@\n", (testDirectoryCreated ? @"YES" : @"NO")); 

testDirectoryCreated = [[NSFileManager defaultManager]createDirectoryAtPath: [NSString stringWithFormat:@"%@/%@",[fm currentDirectoryPath],@"TestDirectory"] 
               withIntermediateDirectories: NO 
                   attributes: nil 
                     error: NULL]; 

NSLog(@"TestDirectory Created: %@\n", (testDirectoryCreated ? @"YES" : @"NO")); 

[pool drain]; 

return 0; 

}

프로그램이 실행되면, 제 1 createDirectory에 YES를 출력한다 :

다음 프로그램이 동작을 보여 호출하고 상기 제 통화 NO을 - "TestDirectory"가 이미 존재할 때.

Apple의 설명서에이 오류가 있습니까? 아니면 뭔가 빠졌습니까?

또한 내 디렉토리 구조의 무결성을 검증하기위한 다른 아이디어가 있습니까? 내가 부를 수있는 간단한 "디렉토리 존재"방법이 있습니까?

감사합니다,

답변

4

이 방법으로 디렉토리가 존재하는지 확인하는 것이 편리하려면 withIntermediateDirectories : 매개 변수에 TRUE를 전달해야합니다.이 매개 변수에 NO 전달하면이 애플의 문서 또한

에 명시되어

는, 디렉토리는이 호출이되는 시점에 존재하지 않아야합니다.

+0

이상한 경우 내 설명서에 "예,이 메서드는 URL에 디렉터리를 만드는 과정에서 존재하지 않는 부모 디렉터리를 만듭니다. 아니요 인 경우 중간 부모 디렉터리가 없으면이 메서드는 실패합니다. 중간 경로 요소 중 하나가 파일이 아니라 디렉토리에 해당하는 경우. " - createDirectoryAtURL의 문구라고 생각하게합니다 : - 다른 동작입니까? – GTAE86

1

그것은 디렉토리가 이미 존재하는 경우 반환 값은, YES 될 것이라고 나에게 이상한 보인다. 나는이 반환 값이 dir을 생성 할 때의 성공을 반영한다고 기대했을 것입니다. 귀하의 수익에 일관성이있을 것입니다.

다른 질문으로, 당신은 fileExistsAtPath보고 할 수 있습니다 :fileExistsAtPath을 : isDirectory을 다음 NSFileManager를 아래.

+0

예, "이미 존재하는"사례에서 메서드가 예를 반환한다는 것이 이상하게 보입니다.하지만 내가하고있는 일에 편리하다고 생각됩니다. Apple의 설명서는 그 자체와 모순되는 것처럼 보입니다. 메서드 설명의 앞부분에, 디렉토리를 만드는 경로가 아직 존재하지 않아야한다고 명시되어 있지만 반환 값에 대한 설명은 그렇지 않은 것으로 나타납니다. 다른 제안을 주셔서 감사합니다! – thauburger