使用FlushFileBuffer()复制和移动文件操作时保持文件一致性的挑战

问题描述 投票:1回答:1

我们使用以下步骤来复制,移动文件:

1)使用系统提供的函数CopyFile(),MoveFile()

2)打开文件使用

hFile = CreateFile(
                    FilePath,
                    GENERIC_READ | GENERIC_WRITE,
                    FILE_SHARE_READ | FILE_SHARE_WRITE,
                    NULL,
                    OPEN_EXISTING,
                    FILE_ATTRIBUTE_NORMAL,
                    NULL
                    );

3)使用FlushFileBuffers(hfile)将缓存刷新到磁盘。

添加了第2步和第3步,因为我们面临文件损坏问题,因为Windows函数CopyFile(),MoveFile()使用系统缓存,并且它在物理设备上引入了文件写入的延迟。

在使用FlushFileBuffers()之后,我们以某种方式最小化了文件损坏发生的次数。但是很少有人喜欢:

  • 创建的文件大小为0字节
  • 文件包含一些垃圾数据,但文件大小是预期的
  • 文件仅包含具有预期文件大小的零

所以我需要帮助来确定我所关注的流程是否正确,或者我应该考虑其他替代方案来确保文件的一致性。

任何帮助赞赏和感谢先进

windows filesystems file-handling
1个回答
0
投票

考虑使用Windows的事务性文件系统(TxF)功能,它将为您提供所需的一致性和原子性。您需要使用事务性文件I / O WIN32API方法而不是正常方法。

否则,您需要自己处理一致性。

© www.soinside.com 2019 - 2024. All rights reserved.