2009-04-21 11 views
19

Voglio rinominare un file in una directory come una transazione atomica. Il file non cambierà le directory. Il percorso viene fornito come percorso UNC a un file system NTFS, probabilmente su Server 03 o 08.Atomicità di File.Move

È File.Move() atomico per questi scopi? Come in, o si completa con successo o fallisce tale che il file originale è ancora intatto?

Il mio istinto dice di sì, ma volevo essere sicuro.

+0

per quanto possibile, SVN sfrutta il fatto che lo spostamento è un'operazione atomica (sulla maggior parte dei file system) in modo estensivo per mantenere l'integrità durante gli aggiornamenti/i commit. – rmeador

+0

non "atomico" implica che ci sia più di una operazione? come si rinomina più di una operazione? NON è una copia + cancella. – Lucas

+1

@Lucas: atomico significa che l'operazione, indipendentemente da quanti passaggi è internamente, avviene sempre insieme. Non può essere anticipato in parte da un'altra discussione, ecc. Questo è il significato originale "indivisibile" della parola "atomico", che è stata smentita nel caso degli atomi attuali dalla fisica moderna ... – rmeador

risposta

21

Sì, in NTFS. Da here:

Come accantonamento se si esegue NTFS, le operazioni sui file sono atomiche a livello di file system. Un rinominare si verificherà in una singola operazione per quanto riguarda qualsiasi codice superiore. Sembra che il problema riscontrato sia un problema in cui l'oggetto FileInfo viene condiviso tra le applicazioni. È un oggetto MarshalByRef e pertanto può essere utilizzato in ambienti remoti. Non so se questo vale per te.

+0

Uh, ma cosa succede se l'applicazione .net è in esecuzione su FAT o accede a qualcosa su una condivisione file? Dov'è 'File.Rename()' che, come parte della sua API, garantisce che il rename sia eseguito atomicamente o lanci un'eccezione che indica che l'atomicità non può essere raggiunta? – binki

+1

Ah, apparentemente voglio 'File.Replace()' che genera un'eccezione su Windows 98 o FAT (o qualsiasi situazione in cui non può garantire l'atomicità, o almeno è ciò che [i documenti] (https: // msdn. microsoft.com/en-us/library/9d9h163f%28v=vs.110%29.aspx) sembra suggerire). – binki

Problemi correlati