Akan writeToFile: atomically: menimpa data?

93

Pertanyaan yang sangat sederhana tetapi tampaknya tidak jelas di dokumen Apple.

Apakah writeToFile:atomically:for NSData, NSArrayetc. akan menimpa data yang ada pada file?

Jiho Kang
sumber

Jawaban:

213

Iya. Itu akan.

Berikut beberapa karakter untuk melewati batas 30 karakter.

BJ Homer
sumber
20
Apakah Anda melakukannya secara atom atau tidak, tidak masalah; dalam kedua kasus tersebut, file tersebut akan sepenuhnya ditimpa dengan data baru.
BJ Homer
Ah, tapi bagi saya gagal, dan file aslinya masih utuh. Karena writeToFile tidak mengembalikan NSError, bagaimana saya bisa menyelidiki kegagalan? ini mungkin masalah izin, tapi saya tidak yakin. Kode saya dijalankan sebagai Installer Plugin Bundle, untuk paket instalasi yang menuntut hak akses root - Saya tidak tahu cara memverifikasi / mencetak hak istimewa yang digunakan untuk menjalankan kode saya.
Motti Shneor
1
@MottiShneor Anda dapat menggunakan -writeToURL: options: error: sebagai gantinya, yang memiliki parameter error.
BJ Homer
7

Metode writeToFile:atomically: SELALU OVERWRITE FILE , terlepas dari atomically:YA atau TIDAK.

Informasi dari dokumen Apple (NSData, bagian "Menyimpan Data"):

Kelas NSData dan subkelasnya menyediakan metode untuk dengan cepat dan mudah menyimpan kontennya ke disk. Untuk meminimalkan risiko kehilangan data, metode ini memberikan opsi untuk menyimpan data secara atomik. Penulisan atom menjamin bahwa data disimpan secara keseluruhan, atau gagal sepenuhnya. Penulisan atom dimulai dengan menulis data ke file sementara. Jika penulisan ini berhasil, maka metode akan memindahkan file sementara ke lokasi akhirnya.

Tidak ada satu kata pun tentang memeriksa apakah file ada.

Misalnya, untuk metode copyItemAtPath:toPath:error:dalam dokumen (NSFileManager, bagian Diskusi) secara khusus ditulis tentang pemeriksaan tersebut:

Jika file dengan nama yang sama sudah ada di dstPath, metode ini menghentikan upaya penyalinan dan mengembalikan kesalahan yang sesuai.

Igor
sumber