示例#1
0
        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);
            }
        }