Liệu writeToFile: nguyên tử: ghi đè dữ liệu?


92

Câu hỏi thực sự đơn giản nhưng nó dường như không rõ ràng trong tài liệu của Apple.

Sẽ writeToFile:atomically:cho NSData, NSArrayvv ghi đè dữ liệu hiện có trên một tệp?

Câu trả lời:


212

Đúng. Nó sẽ.

Dưới đây là một số ký tự để vượt qua giới hạn 30 ký tự.


20
Bạn có làm điều đó về mặt nguyên tử hay không không quan trọng; trong cả hai trường hợp, tệp sẽ bị ghi đè hoàn toàn bằng dữ liệu mới.
BJ Homer,

Ah, nhưng đối với tôi nó không thành công, và tập tin gốc vẫn còn nguyên vẹn. Vì writeToFile không trả về NSError, làm cách nào để điều tra lỗi? nó có thể là một vấn đề về quyền, nhưng tôi không thể chắc chắn. Mã của tôi chạy dưới dạng Gói trình cắm trình cài đặt, đối với gói cài đặt yêu cầu đặc quyền root - Tôi không biết cách xác minh / in ra các đặc quyền mà mã của tôi được chạy.
Motti Shneor

1
@MottiShneor Bạn có thể sử dụng -writeToURL: options: error: thay vào đó có tham số lỗi.
BJ Homer

6

Phương pháp writeToFile:atomically: LUÔN LUÔN TÌM HIỂU TẬP TIN , bất kể atomically:CÓ hay KHÔNG.

Thông tin từ tài liệu của Apple (NSData, phần "Lưu dữ liệu"):

Lớp NSData và các lớp con của nó cung cấp các phương thức để lưu nội dung của chúng vào đĩa một cách nhanh chóng và dễ dàng. Để giảm thiểu rủi ro mất dữ liệu, các phương pháp này cung cấp tùy chọn lưu dữ liệu nguyên tử. Atomic ghi đảm bảo rằng dữ liệu được lưu toàn bộ hoặc bị lỗi hoàn toàn. Quá trình ghi nguyên tử bắt đầu bằng cách ghi dữ liệu vào một tệp tạm thời. Nếu việc ghi này thành công, thì phương thức sẽ di chuyển tệp tạm thời đến vị trí cuối cùng của nó.

Không một lời nào về việc kiểm tra xem tệp có tồn tại hay không.

Ví dụ: đối với phương pháp copyItemAtPath:toPath:error:trong tài liệu (NSFileManager, phần Thảo luận) được viết cụ thể về việc kiểm tra như vậy:

Nếu một tệp có cùng tên đã tồn tại tại dstPath, phương pháp này sẽ dừng nỗ lực sao chép và trả về một lỗi thích hợp.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.