C# – Atomicity of File.Move

.netc++filesystems

I want to rename a file in a directory as an atomic transaction. The file will not be changing directories. The path is provided as a UNC Path to an NTFS file system, probably on either Server 03 or 08.

Is File.Move() atomic for these purposes? As in, it either completes successfully or fails such that the original file is still intact?

My gut says yes, but I wanted to make sure.

Best Solution

Yes, in NTFS. From here:

As an aside if you are running under NTFS then file operations are atomic at the file system level. A rename will occur in a single operation as far as any higher code is concerned. The problem you are seeing almost appears to be an issue where the FileInfo object is being shared across applications. It is a MarshalByRef object and therefore can be used in remoting environments. Don't know if this applies to you.