WriteToFile: atomically: sovrascriverà i dati?


92

Domanda davvero semplice ma non sembra essere chiara nei documenti di Apple.

Will writeToFile:atomically:per NSData, NSArrayecc sovrascrivere i dati esistenti su un file?

Risposte:


212

Sì. Lo farà.

Ecco alcuni caratteri per superare il limite di 30 caratteri.


20
Che tu lo faccia in modo atomico o meno non importa; in entrambi i casi, il file verrà completamente sovrascritto con i nuovi dati.
BJ Homer

Ah, ma per me fallisce e il file originale è intatto. Poiché writeToFile non restituisce un NSError, come posso indagare sull'errore? potrebbe essere un problema di autorizzazioni, ma non posso esserne sicuro. Il mio codice viene eseguito come un pacchetto di plug-in di installazione, per un pacchetto di installazione che richiede i privilegi di root: non so come verificare / stampare i privilegi con cui viene eseguito il mio codice.
Motti Shneor

1
@MottiShneor Potresti usare -writeToURL: options: error: invece, che ha un parametro di errore.
BJ Homer

6

Metodo writeToFile:atomically: SOVRASCRIVI SEMPRE FILE , indipendentemente da atomically:SÌ o NO.

Informazioni dai documenti Apple (NSData, sezione "Salvataggio dei dati"):

La classe NSData e le sue sottoclassi forniscono metodi per salvare rapidamente e facilmente i loro contenuti su disco. Per ridurre al minimo il rischio di perdita di dati, questi metodi offrono la possibilità di salvare i dati in modo atomico. Le scritture Atomic garantiscono che i dati vengano salvati nella loro interezza o che falliscano completamente. La scrittura atomica inizia scrivendo i dati in un file temporaneo. Se questa scrittura ha esito positivo, il metodo sposta il file temporaneo nella posizione finale.

Nessuna parola sul controllo dell'esistenza del file.

Ad esempio, per il metodo copyItemAtPath:toPath:error:in docs (NSFileManager, sezione Discussione) scritto specificamente su tale controllo:

Se un file con lo stesso nome esiste già in dstPath, questo metodo interrompe il tentativo di copia e restituisce un errore appropriato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.