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

时间:2018-08-22 10:53:02

标签: windows filesystems file-handling

我们正在按照以下步骤复制,移动文件:

1)使用系统提供的函数复制File(),MoveFile()

2)使用打开文件

soup = BeautifulSoup(urllib.request.urlopen(url))
for tag in soup.select(".table-responsive table tr td:nth-of-type(5) span"):
    tag = str(tag)
    print (tag)

3)使用hFile = CreateFile( FilePath, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL ); 将缓存刷新到磁盘。

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

在使用FlushFileBuffers()之后,我们以某种方式将文件损坏的发生率降至最低。 但是几乎没有其他类似的东西:

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

因此,我需要帮助来确定我遵循的流程是否正确,或者我应该考虑其他选择以确保文件的一致性。

任何帮助表示感谢,并感谢高级帮助

1 个答案:

答案 0 :(得分:0)

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

否则,您需要自己照顾一致性。