簡體   English   中英

在使用 FlushFileBuffer() 復制和移動文件操作時保持文件一致性的挑戰

[英]Challenges maintaining file consistency while copy & move file operations with FlushFileBuffer()

我們使用以下步驟來復制、移動文件:

  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 的事務性文件系統 (TxF) 功能,它將為您提供所需的一致性和原子性。 您需要使用事務性文件 I/O WIN32API 方法而不是普通方法。

否則,您需要自己處理一致性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM