public bool SerializeToFile(T value, string fileName, bool createBackup = false, bool throwOnError = true) { string dirName = Path.GetDirectoryName(fileName); string tempFileName = fileName + TempFileExt; string backupFileName = fileName + BackupFileExt; try { if (dirName != null) { Directory.CreateDirectory(dirName); } using (var textWriter = Streams.CreateTextFile(tempFileName)) SerializeToStream(value, textWriter); if (File.Exists(fileName)) { File.Replace(tempFileName, fileName, backupFileName); } else { File.Move(tempFileName, fileName); } if (!createBackup) { try { File.Delete(backupFileName); } catch (Exception e) { if (!e.IsIOException()) { throw; } Log.Warning(ErrorRemoveBackupFile.Fmt(backupFileName), e); } } return(true); } catch (Exception e) { if (!e.IsIOException()) { throw; } ProcessIOException(e, throwOnError, ErrorSaveFile.Fmt(fileName)); return(false); } }