FlushFileBuffers 函式 (fileapi.h)
排清指定檔案的緩衝區,並導致所有緩衝的資料寫入檔案。
語法
BOOL FlushFileBuffers(
[in] HANDLE hFile
);
參數
[in] hFile
開啟檔案的控制碼。
檔案控制碼必須具有 GENERIC_WRITE 存取權限。 如需詳細資訊,請參閱 檔案安全性和存取權限。
如果 hFile 是通訊裝置的控制碼,函式只會排清傳輸緩衝區。
如果 hFile 是具名管道伺服器端的控制碼,則函式不會在用戶端從管道讀取所有緩衝資料之前傳回。
傳回值
如果函式成功,則傳回非零的值。
如果此函式失敗,則傳回值為零。 若要取得擴充的錯誤資訊,請呼叫 GetLastError。
如果 hFile 是主控台輸出的控制碼,則函式會失敗。 這是因為主控台輸出不會緩衝處理。 函式會傳回 FALSE,而 GetLastError 會傳回 ERROR_INVALID_HANDLE。
備註
一般而言,WriteFile和WriteFileEx 函式會將資料寫入作業系統定期寫入磁片或通訊管道的內部緩衝區。 FlushFileBuffers函式會將指定檔案的所有緩衝資訊寫入裝置或管道。
由於系統內的磁片快取互動,在每次寫入磁片磁碟機裝置之後,當執行許多寫入時, FlushFileBuffers 函 式可能會效率不佳。 如果應用程式正在對磁片執行多個寫入,也必須確保重要資料寫入永續性媒體,應用程式應該使用未緩衝的 I/O,而不是經常呼叫 FlushFileBuffers。 若要開啟未緩衝 I/O 的檔案,請使用FILE_FLAG_NO_BUFFERING和FILE_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 |
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應