WriteToFile: atomically: verilerin üzerine yazılır mı?


93

Gerçekten basit bir soru, ancak Apple'ın belgelerinde net görünmüyor.

Will writeToFile:atomically:için NSData, NSArraybir dosya üzerinde vs. yazma mevcut bilgi?

Yanıtlar:


214

Evet. Olacak.

İşte 30 karakter sınırını aşmak için bazı karakterler.


20
Bunu atomik olarak yapıp yapmamanız önemli değil; her iki durumda da dosyanın tamamen üzerine yeni veriler yazılacaktır.
BJ Homer

Ah, ama benim için başarısız oluyor ve orijinal dosya sağlam. WriteToFile bir NSError döndürmediğinden, hatayı nasıl araştırabilirim? bir izin sorunu olabilir, ancak emin olamıyorum. Kodum, kök ayrıcalıkları gerektiren bir kurulum paketi için bir Yükleyici Eklenti Paketi olarak çalışıyor - Kodumun çalıştırıldığı ayrıcalıkları nasıl doğrulayacağımı / yazdıracağımı bilmiyorum.
Motti shneor

1
@MottiShneor -writeToURL: options: error: kullanabilirsiniz, bunun yerine bir error parametresi vardır.
BJ Homer

7

Yöntem EVET veya writeToFile:atomically: HAYIR'dan bağımsız olarak HER ZAMAN DOSYA ÜZERİNE YAZINatomically: .

Alınan bilgiler Elma docs (NSData, bölüm "Tasarruf Veriler"):

NSData sınıfı ve alt sınıfları, içeriklerini hızlı ve kolay bir şekilde diske kaydetmek için yöntemler sağlar. Veri kaybı riskini en aza indirmek için bu yöntemler, verileri atomik olarak kaydetme seçeneği sunar. Atomik yazılar, verilerin ya bütünüyle kaydedildiğini ya da tamamen başarısız olduğunu garanti eder. Atomik yazma, verilerin geçici bir dosyaya yazılmasıyla başlar. Bu yazma başarılı olursa, yöntem geçici dosyayı son konumuna taşır.

Dosyanın var olup olmadığını kontrol etmekle ilgili tek kelime yok.

Örneğin, yöntem için copyItemAtPath:toPath:error:de dokümanlar , özellikle, örneğin kontrol ile ilgili olarak yazılmıştır (NSFileManager, bölüm Tartışma):

DstPath'de aynı ada sahip bir dosya zaten varsa, bu yöntem kopyalama girişimini durdurur ve uygun bir hata döndürür.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.