C#File.Replace防止崩溃File.Replace执行原语/事务操作,这样在崩溃或断电的情况下,目标文件永远不会丢失,也不会'是否丢失了部分文件(即原始文件或新文件)?如果没有,是否有另一种方法可以防止这种情况发生?注意:这将在Windows7或更高版本的NTFS驱动器上进行,据我所知,它们支持事务处理。注意:我问的是关于保存在primefaces庄园而不关心单独的过程也像这个问题一样打开文件。File.Replace在内部使用WinAPI函数ReplaceFile(当然在Windows上)。但是,即使在该函数中原始性也没有记录行为,并且文档有些含糊。首先,如果你想要一致性,你必须使用备份文件。根据文档:[当移动文件失败时...]如果指定了lpBackupFileName,则替换和替换文件将保留其原始文件名。否则,替换文件不再存在,替换文件以其原始名称存在。另一种失败模式导致[当移动文件失败时...]替换文件仍然以其原始名称存在;但是,它会从它正在替换的文件中继承文件流和属性。要替换的文件仍然存在,但名称不同。如果指定了lpBackupFileName,它将是替换文件的名称。这是最糟糕的文档行为——您仍然拥有这两个文件,但要“复制”的文件的安全属性已更改。如果您使用具有有限权限的服务来写入文件,则会出现问题。最后,当删除失败时,什么也没有发生。那么,整个操作都是Primefaces吗?尽管它没有正式记录,但我们有一些指示。首先,只要您使用备份文件选项,替换操作最终就是文件ID的交换(以及所有文件属性的单向更新);这是一个在NTFS上的事务性操作,所以我的期望是这部分实际上是primefaces,只要您不必担心文件属性、ACL和备用数据流。但是,对于File.Replace和ReplaceFile,此行为均不符合合同规定。如果需要以约定的方式实现变性操作,就需要使用TxF。两个主要问题是,一是TxF仅从Vista开始受支持,二是它在实践中使用不多并且已被弃用。真可惜:)Microsoft推荐的TxF替代方案记录在https://msdn.microsoft.com/en-us/library/windows/desktop/hh802690%28v=vs.85%29.aspx-包括使用ReplaceFile(在.NET中作为文件。替换)。File.Replace不是primefaces:https://social.msdn.microsoft.com/Forums/vstudio/en-US/848ce6b7-ce52-43ca-b79b-168835837c63/is-filereplace-atomic-on-an-ntfs-filesystem?Forum=netfxbcl“File.Replace()在内部使用对本机WindowsAPI函数ReplaceFile()的调用”https://msdn.microsoft.com/en-us/library/windows/desktop/aa365512(v=vs.85.aspx以上是C#学习教程:C#File.Replace防止崩溃,全部内容分享给大家。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,并不代表侵权,如有侵权,请点击右边联系管理员删除。如需转载请注明出处:
