3

を使用してファイルを開きました

HANDLE handle= 
    CreateFileW(
        fileName, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 
        FILE_FLAG_OVERLAPPED, NULL);

ファイル ハンドルは、非同期読み取り操作に使用されます。

ReadFile(handle, buffer, 1, NULL, &overlapped);

これは機能します。ただし、今は同期書き込みを行いたいです。WriteFileドキュメンテーションは次のように述べています

hFile が FILE_FLAG_OVERLAPPED で開かれた場合、次の条件が
有効になります。

lpOverlapepdパラメータが省略された場合、ERROR_INVALID_PARAMETERによって返されGetLastError()ます。2 つのハンドル (1 つは読み取り用、もう 1 つは書き込み用) を開くことも、2 番目のハンドルがERROR_ACCESS_DENIEDエラーを生成するため機能しません。

非同期読み取りおよび同期書き込み用にファイルを開くにはどうすればよいですか? コードの複雑さを不必要に増やしたくありません。

4

2 に答える 2

3

同期書き込みは、書き込み操作の手動リセット イベントを作成し、ファイルに書き込み (書き込み操作にオーバーラップ構造のイベントを使用)、すぐにイベントを待機することで実現できます。

非同期読み取りが書き込みと非同期である必要があるかどうかに応じて、互換性のある待機を使用して、読み取り完了ルーチンを呼び出すことができるようにする必要がある場合があります。そうしないと、読み取りが行われ、データがバッファーに格納されますが、処理することはできません。

于 2011-07-12T12:47:46.400 に答える
0

2 つのハンドルを開きます。1 つは非同期読み取り用、もう 1 つは同期書き込み用です。ファイル共有属性を設定していることを確認してください(FILE_SHARE_READ|FILE_SHARE_WRITE)。テストしていません。

于 2011-07-12T11:48:23.820 に答える