O writeToFile: atomicamente: sobrescreverá os dados?

92

Pergunta realmente simples, mas não parece estar clara nos documentos da Apple.

Vontade writeToFile:atomically:para NSData,NSArray etc. substituir os dados existentes em um arquivo?

Jiho Kang
fonte

Respostas:

212

Sim. Será.

Aqui estão alguns caracteres para ultrapassar o limite de 30 caracteres.

BJ Homer
fonte
20
Se você faz isso atomicamente ou não, não importa; em qualquer um dos casos, o arquivo será completamente sobrescrito com os novos dados.
BJ Homer
Ah, mas para mim falha, e o arquivo original está intacto. Como writeToFile não retorna um NSError, como posso investigar a falha? pode ser um problema de permissão, mas não tenho certeza. Meu código é executado como um pacote de plug-in do instalador, para um pacote de instalação que exige privilégios de root - não sei como verificar / imprimir os privilégios com os quais meu código é executado.
Motti Shneor
1
@MottiShneor Você poderia usar -writeToURL: options: error: em vez disso, que tem um parâmetro de erro.
BJ Homer
6

Método writeToFile:atomically: SEMPRE SOBRESCREVER ARQUIVO , independentemente de atomically:SIM ou NÃO.

Informações dos documentos da Apple (NSData, seção "Salvando dados"):

A classe NSData e suas subclasses fornecem métodos para salvar rápida e facilmente seu conteúdo em disco. Para minimizar o risco de perda de dados, esses métodos oferecem a opção de salvar os dados atomicamente. As gravações atômicas garantem que os dados sejam salvos em sua totalidade ou falhem completamente. A gravação atômica começa gravando os dados em um arquivo temporário. Se a gravação for bem-sucedida, o método moverá o arquivo temporário para seu local final.

Nenhuma palavra sobre verificar se o arquivo existe.

Por exemplo, para o método copyItemAtPath:toPath:error:em docs (NSFileManager, seção Discussão) especificamente escrito sobre tal verificação:

Se um arquivo com o mesmo nome já existir em dstPath, este método interrompe a tentativa de cópia e retorna um erro apropriado.

Igor
fonte