Overwriting an existing file in C#
Using File.Replace() still seems the best option to me. As you mentioned on SO, the following might give a problem:


  If the sourceFileName and
  destinationFileName are on different
  volumes, this method will raise an
  exception. If the
  destinationBackupFileName is on a
  different volume from the source file,
  the backup file will be deleted.


To prevent this exception from being thrown, can't you first check whether you can serialize the temp file directly to the desired volume? If this isn't possible, further processing will fail as well, so you can already show a message that the volume isn't writeable.

Afterwards, call the Replace function, creating a backup file. When it fails, handle appropriately and check in which state your files are, indicate to the user when something is 'corrupt' (so point to the backup file). In the finally check whether the backup file exists and remove.