기존 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의 설명서에이 오류가 있습니까? 아니면 뭔가 빠졌습니까?
또한 내 디렉토리 구조의 무결성을 검증하기위한 다른 아이디어가 있습니까? 내가 부를 수있는 간단한 "디렉토리 존재"방법이 있습니까?
감사합니다,
톰
이상한 경우 내 설명서에 "예,이 메서드는 URL에 디렉터리를 만드는 과정에서 존재하지 않는 부모 디렉터리를 만듭니다. 아니요 인 경우 중간 부모 디렉터리가 없으면이 메서드는 실패합니다. 중간 경로 요소 중 하나가 파일이 아니라 디렉토리에 해당하는 경우. " - createDirectoryAtURL의 문구라고 생각하게합니다 : - 다른 동작입니까? – GTAE86