FlushFileBuffers 関数 (fileapi.h)

指定したファイルのバッファーをフラッシュし、バッファー内のすべてのデータをファイルに書き込みます。

構文

BOOL FlushFileBuffers(
  [in] HANDLE hFile
);

パラメーター

[in] hFile

開いているファイルへのハンドル。

ファイル ハンドルには、GENERIC_WRITE アクセス権が必要です。 詳細については、「ファイルのセキュリティとアクセス権の」を参照してください。

hFile が通信デバイスへのハンドルである場合、関数は送信バッファーのみをフラッシュします。

hFile が名前付きパイプのサーバー側へのハンドルである場合、クライアントがバッファー内のすべてのデータをパイプから読み取るまで、関数は戻りません。

戻り値

関数が成功した場合、戻り値は 0 以外です。

関数が失敗した場合、戻り値は 0 です。 拡張エラー情報を取得するには、GetLastError呼び出します。

hFile コンソール出力のハンドルである場合、関数は失敗します。 これは、コンソール出力がバッファーに格納されていないためです。 この関数は FALSE返し、GetLastError ERROR_INVALID_HANDLEを返します。

備考

通常、WriteFile 関数と WriteFileEx 関数は、オペレーティング システムがディスクまたは通信パイプに定期的に書き込む内部バッファーにデータを書き込みます。 FlushFileBuffers 関数は、指定したファイルのすべてのバッファー情報をデバイスまたはパイプに書き込みます。

システム内でのディスク キャッシュ操作により、多数の書き込みが個別に実行されている場合、ディスク ドライブ デバイスへの書き込みのたびに使用される場合、FlushFileBuffers 関数は非効率的になる可能性があります。 アプリケーションがディスクへの複数の書き込みを実行していて、重要なデータが永続的なメディアに書き込まれるようにする必要がある場合、アプリケーションでは、FlushFileBuffersを頻繁に呼び出す代わりに、バッファーなしの I/O 使用する必要があります。 バッファーされていない 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 アプリ]
ターゲット プラットフォーム の ウィンドウズ
ヘッダー fileapi.h (Windows.h を含む)
ライブラリ Kernel32.lib
DLL Kernel32.dll

関連項目

CreateFile の

ファイル管理機能の

WriteFile の

WriteFileEx の