2012-02-16 4 views
62

내 코드 fileExistsAtPath :에서 확인한 파일에 대해 NO를 반환합니다. 나는 이것에 머리를 긁적이고 왜 작동하지 않는 이유를 알아낼 수 없으므로이 디렉토리가 절대적으로 존재하지만 어쨌든 만들어지지 않으면이 코드로 변경하십시오. 이 응용 프로그램 디렉토리 폴더가 코드와 ERR를 실행 한 후fileExistsAtPath : 존재하는 파일에 대해 NO를 반환합니다.

NSError* err = nil; 
NSURL *dir = [[NSFileManager defaultManager] URLForDirectory:NSApplicationSupportDirectory 
                 inDomain:NSUserDomainMask 
               appropriateForURL:nil 
                 create: YES 
                  error:&err]; 
BOOL exists = [[NSFileManager defaultManager] fileExistsAtPath:[dir absoluteString]]; 

아직 NO 인 존재, 0입니다.

어떻게 될 수 있습니까?

TIA는

+0

- : 또는 문서를 일시적으로 캐시 : 그래서 대신 fullpath에 저장의 전 경로 접미사 을 지속하고 어떤 스토리지 클래스로 암시되는 접두사 결국 nil을 반환합니다. – bneely

+0

더 나아가 문서는 생성 동작이 동기식인지 비동기식인지를 나타내지는 않지만 fileExistsAtPath : 호출 전에 몇 초 동안 기다려서 시도하고 결과가 변경되는지 확인합니다. – bneely

+0

언급 한대로 오류가 없습니다. 또한 dir은 디렉토리의 경로로 올바르게 채워집니다 (콘솔이나 NSLog에서는 그 내용이 올바르게 설정되어 있습니다). 어쨌든이 코드를 호출하기 전에 디렉토리가 이미 있습니다. 두 번 실행하면 BOOL이 0으로 설정됩니다. – Gruntcakes

답변

129

당신은 [dir path]하지 [dir absoluteString] 사용해야합니다.

+4

내가 한 시간 정도 시간을 낭비하게 만들었거나 내 코드를 디버깅하게 만든 차이점은 무엇입니까? – Mazyod

+10

경로는 정규 경로를 반환합니다. absoluteString은 file : /// url을 문자열로 반환합니다. (lldb) print fileURL.path $ R0 = "/ Users/joshwisenbaker/Library/Developer/CoreSimulator/Devices/4ED0C33D-A9AB-49EF-9AD3-13396E7C3CCA/data/Containers/Shared/AppGroup/D2180E2E- A409-430E-AC47-C71353547417/jobs.plist " (lldb) 인쇄 fileURL.absoluteString (문자열!) $ R1 ="파일 : /// 사용자/joshwisenbaker/라이브러리/개발자/CoreSimulator/디바이스/4ED0C33D-A9AB- 4937-9AD3-13396E7C3CCA/data/컨테이너/공유/AppGroup/D2180E2E-A409-430E-AC47-C71353547417/jobs.plist " – macshome

+0

나는 경로를 사용하고 있지만 매번 false를 반환합니다. –

1

경로와 URL이 구별됩니다. 유닉스 표현의 경로는 특정 파일이나 디렉토리가 존재하는 위치입니다. 마찬가지로 "/Users/username/Desktop/myfile.txt"

알의는 URL이뿐만 아니라 위치하지만 계획을 포함뿐만 아니라 예 : http : // 또는 https : // 우리의 경우 파일의 URL fileExistsAtPath 또는 removeItemAtPath의 경로를 필요 같은 (file:///Users/username/Desktop/myfile.txt)

방법 url보다는 매개 변수.

copyItemAtURL:toURL:error:(NSError * _Nullable *)error과 같은 메소드는 URL을 필요로합니다.

경로를 검색하려면 path 속성의 NSURL 개체를 사용하십시오. absoluteString은 스키마와 함께 경로를 제공합니다.

4

나는 몇 시간 동안 내 머리를 벽에 부딪 히고 있었다. 분명히 xcode의 모든 실행마다 app 디렉토리 경로가 변경되었습니다. 그것의 UUID 부분. 당신은 또한 URLForDirectory 경우 ... 방법을 확인하지 않는 [

관련 문제