writeToFile : atomically : 데이터를 덮어 쓰나요?


92

정말 간단한 질문이지만 Apple 문서에서는 명확하지 않은 것 같습니다.

writeToFile:atomically:에 대한 NSData, NSArray파일에 등을 덮어 쓰기 기존 데이터?

답변:


212

예. 그럴 것입니다.

30 자 제한을 통과하는 일부 문자는 다음과 같습니다.


20
원자 적으로 수행하는지 여부는 중요하지 않습니다. 두 경우 모두 새 데이터로 파일을 완전히 덮어 씁니다.
BJ Homer

아,하지만 나에게는 실패하고 원본 파일은 손상되지 않았습니다. writeToFile이 NSError를 반환하지 않으므로 실패를 어떻게 조사 할 수 있습니까? 권한 문제 일 수 있지만 확신 할 수 없습니다. 내 코드는 루트 권한이 필요한 설치 패키지의 경우 설치 프로그램 플러그인 번들로 실행됩니다. 내 코드가 실행되는 권한을 확인 / 인쇄하는 방법을 모르겠습니다.
은 Motti Shneor

1
@MottiShneor 대신 오류 매개 변수가있는 -writeToURL : options : error :를 사용할 수 있습니다.
BJ Homer

6

YES 또는 NO에 관계없이 Method writeToFile:atomically: ALWAYS OVERWRITE FILEatomically: .

Apple 문서의 정보 (NSData, "데이터 저장"섹션) :

NSData 클래스와 하위 클래스는 콘텐츠를 디스크에 빠르고 쉽게 저장할 수있는 메서드를 제공합니다. 데이터 손실 위험을 최소화하기 위해 이러한 방법은 데이터를 원자 적으로 저장하는 옵션을 제공합니다. Atomic 쓰기는 데이터가 완전히 저장되거나 완전히 실패하도록 보장합니다. 원자 적 쓰기는 데이터를 임시 파일에 쓰는 것으로 시작됩니다. 이 쓰기가 성공하면 메서드는 임시 파일을 최종 위치로 이동합니다.

파일이 있는지 확인하는 것에 대해 한 마디도 없습니다.

예를 들어, 방법 copyItemAtPath:toPath:error:문서 구체적 확인에 대한 기록 (NSFileManager를 부 토론)

같은 이름의 파일이 이미 dstPath에있는 경우이 메서드는 복사 시도를 중지하고 적절한 오류를 반환합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.