【问题标题】:Safe disk operations with C#使用 C# 进行安全磁盘操作
【发布时间】:2014-07-07 02:04:32
【问题描述】:

我有以下问题。现在,我们正在关闭时写出配置文件。碰巧用户在写入过程中杀死了进程,导致配置损坏。因此,我必须确保磁盘上的文件始终正确,并且不存在部分写入的文件等。当然,我可以自己使用备份文件实现一些模式(比如写入备份,然后用新文件替换旧文件,一些逻辑来检测和恢复失败的写入......)但也许有一种框架那里已经处理了这个?

【问题讨论】:

  • 您可以查看自 Vista 以来可用的事务文件系统。您需要 PInvoke 才能使用它。另一种方法是使用数据库而不是文件

标签: c# io


【解决方案1】:

事务性 NTFS,随 Windows Vista 引入,允许对文件系统执行原子操作(读取、写入、删除...)。

这是一个可用于 .Net 的托管包装器:http://archive.msdn.microsoft.com/txfmanaged

请注意,遗憾的是,Microsoft 正在考虑弃用 Windows 的这一强大功能。见http://msdn.microsoft.com/en-us/library/windows/desktop/hh802690(v=vs.85).aspx

【讨论】:

    【解决方案2】:

    您可以将配置文件写入临时文件,然后使用Sysyem.IO.File.Replace 方法将实际文件替换为临时文件:

    string config = @"C:\my_config.xml";
    string backup = @"C:\my_config.bak";
    string temp = @"C:\temp_config.xml";
    
    SaveConfigurationTo(temp);
    File.Replace(temp, config, backup);
    

    如果您不想创建旧配置文件的备份,可以将null 作为第三个参数传递。

    请参阅:MSDN 上的File.Replace Method

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-20
      • 2019-12-11
      • 2015-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多