จะ writeToFile: atomically: เขียนทับข้อมูลหรือไม่


93

คำถามง่ายๆจริงๆ แต่ดูเหมือนจะไม่ชัดเจนในเอกสารของ Apple

Will writeToFile:atomically:สำหรับNSData, NSArrayฯลฯ เขียนทับข้อมูลที่มีอยู่ในไฟล์หรือไม่?

คำตอบ:


214

ใช่. มันจะ.

ต่อไปนี้คืออักขระบางตัวที่ต้องผ่านขีด จำกัด 30 อักขระ


20
ไม่ว่าคุณจะทำแบบอะตอมหรือไม่ก็ไม่สำคัญ ไม่ว่าในกรณีใดไฟล์นั้นจะถูกเขียนทับด้วยข้อมูลใหม่ทั้งหมด
BJ Homer

อ่า แต่สำหรับฉันมันล้มเหลวและไฟล์ต้นฉบับก็ยังคงอยู่ เนื่องจาก writeToFile ไม่ส่งคืน NSError ฉันจะตรวจสอบความล้มเหลวได้อย่างไร อาจเป็นปัญหาด้านสิทธิ์ แต่ฉันไม่แน่ใจ รหัสของฉันทำงานเป็น Installer Plugin Bundle สำหรับแพ็คเกจการติดตั้งที่ต้องการสิทธิ์ระดับรูท - ฉันไม่รู้วิธีตรวจสอบ / พิมพ์สิทธิ์ที่ใช้รหัสของฉัน
Motti Shneor

1
@MottiShneor คุณสามารถใช้ -writeToURL: options: error: แทนซึ่งมีพารามิเตอร์ข้อผิดพลาด
BJ Homer

7

วิธีการwriteToFile:atomically: OVERWRITE FILE เสมอไม่ว่าจะเป็นatomically:YES หรือ NO ก็ตาม

ข้อมูลจากApple docs (NSData ส่วน "การบันทึกข้อมูล"):

คลาส NSData และคลาสย่อยจัดเตรียมเมธอดในการบันทึกเนื้อหาลงในดิสก์อย่างรวดเร็วและง่ายดาย เพื่อลดความเสี่ยงของการสูญหายของข้อมูลวิธีการเหล่านี้มีตัวเลือกในการบันทึกข้อมูลแบบอะตอม Atomic เขียนรับประกันว่าข้อมูลจะได้รับการบันทึกอย่างครบถ้วนหรือล้มเหลวอย่างสมบูรณ์ การเขียนปรมาณูเริ่มต้นด้วยการเขียนข้อมูลลงในไฟล์ชั่วคราว หากการเขียนนี้สำเร็จเมธอดจะย้ายไฟล์ชั่วคราวไปยังตำแหน่งสุดท้าย

ไม่มีคำใด ๆ เกี่ยวกับการตรวจสอบว่ามีไฟล์อยู่หรือไม่

ตัวอย่างเช่นสำหรับวิธีการcopyItemAtPath:toPath:error:ในเอกสาร (NSFileManager หัวข้อ Discussion) ที่เขียนโดยเฉพาะเกี่ยวกับการตรวจสอบดังกล่าว:

หากไฟล์ที่มีชื่อเดียวกันมีอยู่แล้วที่ dstPath วิธีนี้จะหยุดการพยายามคัดลอกและส่งกลับข้อผิดพลาดที่เหมาะสม

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.