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?

Respostas:


212

Sim. Será.

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


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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.