FlushFileBuffers 函式 (fileapi.h)

排清指定檔案的緩衝區,並導致所有緩衝的資料寫入檔案。

語法

BOOL FlushFileBuffers(
  [in] HANDLE hFile
);

參數

[in] hFile

開啟檔案的控制碼。

檔案控制碼必須具有 GENERIC_WRITE 存取權限。 如需詳細資訊,請參閱 檔案安全性和存取權限

如果 hFile 是通訊裝置的控制碼,函式只會排清傳輸緩衝區。

如果 hFile 是具名管道伺服器端的控制碼,則函式不會在用戶端從管道讀取所有緩衝資料之前傳回。

傳回值

如果函式成功,則傳回非零的值。

如果此函式失敗,則傳回值為零。 若要取得擴充的錯誤資訊,請呼叫 GetLastError

如果 hFile 是主控台輸出的控制碼,則函式會失敗。 這是因為主控台輸出不會緩衝處理。 函式會傳回 FALSE,而 GetLastError 會傳回 ERROR_INVALID_HANDLE

備註

一般而言,WriteFileWriteFileEx 函式會將資料寫入作業系統定期寫入磁片或通訊管道的內部緩衝區。 FlushFileBuffers函式會將指定檔案的所有緩衝資訊寫入裝置或管道。

由於系統內的磁片快取互動,在每次寫入磁片磁碟機裝置之後,當執行許多寫入時, FlushFileBuffers 函 式可能會效率不佳。 如果應用程式正在對磁片執行多個寫入,也必須確保重要資料寫入永續性媒體,應用程式應該使用未緩衝的 I/O,而不是經常呼叫 FlushFileBuffers。 若要開啟未緩衝 I/O 的檔案,請使用FILE_FLAG_NO_BUFFERINGFILE_FLAG_WRITE_THROUGH旗標呼叫CreateFile函式。 這可防止快取檔案內容,並使用每個寫入排清磁片的中繼資料。 如需詳細資訊,請參閱 CreateFile

若要排清磁片區上所有開啟的檔案,請使用磁片區的控制碼呼叫 FlushFileBuffers 。 呼叫端必須具有系統管理許可權。 如需詳細資訊,請參閱 使用特殊許可權執行

使用 CreateFile開啟磁片區時, lpFileName 字串的格式應該是:\.\x: 或 \?\Volume{GUID}。 請勿在磁片區名稱中使用尾端反斜線,因為這表示磁片磁碟機的根目錄。

在 Windows 8 和 Windows Server 2012 中,下列技術支援此函式。

技術 支援
伺服器訊息區 (SMB) 3.0 通訊協定
SMB 3.0 透明容錯移轉 (TFO)
具有向外延展檔案共用的 SMB 3.0 (SO)
叢集共用磁片區檔案系統 (CsvFS)
彈性檔案系統 (ReFS)
 

範例

如需範例,請參閱 多執行緒管道伺服器

需求

   
最低支援的用戶端 Windows XP [傳統型應用程式 |UWP 應用程式]
最低支援的伺服器 Windows Server 2003 [傳統型應用程式 |UWP 應用程式]
目標平台 Windows
標頭 fileapi.h (包含 Windows.h)
程式庫 Kernel32.lib
DLL Kernel32.dll

另請參閱

CreateFile

檔案管理功能

WriteFile

WriteFileEx