C++ 在原子操作(Windows)中用另一个文件替换文件

C++ 在原子操作(Windows)中用另一个文件替换文件,c++,windows,C++,Windows,我有两个文件:A和B。当B在另一个程序中打开时,我需要用A替换B 以下方法: MoveFile将B重命名为C,然后将A重命名为B,然后删除C 很好。然而,我需要一种原子方法来做到这一点,因为如果一个重命名失败,数据将处于不一致的状态 我尝试使用MOVEFILE\u REPLACE\u EXISTING标志MoveFileEx,但当文件B被另一个程序打开时,它不起作用。与ReplaceFile函数相同。还有其他想法吗?谢谢你这不是一个原子操作,所以你能用原子的方式来做吗?为什么不能使用正确的错误处

我有两个文件:A和B。当B在另一个程序中打开时,我需要用A替换B

以下方法:

MoveFile
将B重命名为C,然后将A重命名为B,然后删除C

很好。然而,我需要一种原子方法来做到这一点,因为如果一个重命名失败,数据将处于不一致的状态


我尝试使用
MOVEFILE\u REPLACE\u EXISTING
标志
MoveFileEx
,但当文件B被另一个程序打开时,它不起作用。与
ReplaceFile
函数相同。还有其他想法吗?谢谢你

这不是一个原子操作,所以你能用原子的方式来做吗?为什么不能使用正确的错误处理?文件锁的存在是有原因的。尝试更改,如果无法完成,则失败。我怀疑答案是不可能的,请尝试阅读,看看它是否适用于您。错误处理将不起作用。假设文件在网络上。第一次重命名有效,第二次失败,第三次(错误处理)也将失败。所以我会让文件处于不一致的状态。原子操作是needed@Kyle,原子重命名操作存在于Linux中(当然,前提是电源没有突然中断,但有处理该操作的日志),对于任何非玩具操作系统来说,这是完全合法的请求。