¿WriteToFile: atómicamente: sobrescribirá los datos?


93

Pregunta realmente simple, pero no parece estar clara en los documentos de Apple.

¿ writeToFile:atomically:For NSData, NSArrayetc. sobrescribirá los datos existentes en un archivo?

Respuestas:


213

Si. Va a.

Aquí hay algunos personajes para superar el límite de 30 caracteres.


20
No importa si lo haces de forma atómica o no; en cualquier caso, el archivo se sobrescribirá completamente con los nuevos datos.
BJ Homer

Ah, pero para mí falla y el archivo original está intacto. Como writeToFile no devuelve un NSError, ¿cómo puedo investigar la falla? puede ser un problema de permisos, pero no puedo estar seguro. Mi código se ejecuta como un paquete de complementos de instalador, para un paquete de instalación que exige privilegios de root; no sé cómo verificar / imprimir los privilegios con los que se ejecuta mi código.
Motti Shneor

1
@MottiShneor Puede usar -writeToURL: options: error: en su lugar, que tiene un parámetro de error.
BJ Homer

7

Método writeToFile:atomically: SIEMPRE SOBRESCRIBIR ARCHIVO , independientemente del atomically:SÍ o NO.

Información de los documentos de Apple (NSData, sección "Guardar datos"):

La clase NSData y sus subclases proporcionan métodos para guardar rápida y fácilmente su contenido en el disco. Para minimizar el riesgo de pérdida de datos, estos métodos ofrecen la opción de guardar los datos de forma atómica. Las escrituras atómicas garantizan que los datos se guardan en su totalidad o fallan por completo. La escritura atómica comienza escribiendo los datos en un archivo temporal. Si esta escritura tiene éxito, el método mueve el archivo temporal a su ubicación final.

Ni una palabra sobre comprobar si el archivo existe.

Por ejemplo, para el método copyItemAtPath:toPath:error:en documentos (NSFileManager, sección Discusión) escrito específicamente sobre dicha verificación:

Si ya existe un archivo con el mismo nombre en dstPath, este método detiene el intento de copia y devuelve un error apropiado.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.