¿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?

Jiho Kang
fuente

Respuestas:

213

Si. Va a.

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

BJ Homer
fuente
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.

Igor
fuente