Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用C语言实现安全磁盘操作#_C#_Io - Fatal编程技术网

C# 用C语言实现安全磁盘操作#

C# 用C语言实现安全磁盘操作#,c#,io,C#,Io,我有一个问题。现在,我们正在关闭时写入配置文件。碰巧用户在写入过程中被进程终止,导致配置损坏。因此,我必须确保磁盘上的文件始终正确,并且没有部分写入的文件等。当然,我可以自己使用备份文件实现一些模式(比如写到备份,然后用新文件替换旧文件,检测和恢复失败的写操作的一些逻辑…),但是可能已经有一种框架可以处理这个问题了 Windows Vista引入的事务性NTFS,允许在文件系统上执行原子操作(读、写、删除…) 下面是一个可用于.Net的托管包装器: 请注意,不幸的是,微软正在考虑不推荐Windo

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

Windows Vista引入的事务性NTFS,允许在文件系统上执行原子操作(读、写、删除…)

下面是一个可用于.Net的托管包装器:


请注意,不幸的是,微软正在考虑不推荐Windows的这一伟大功能。请参见

您可以将配置文件写入临时文件,然后使用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上。

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