私のC++アプリケーションでは、isoファイルを非同期で- 重複したフラグとそれ以降 - readfile
で読みとそうとしています。 しかし、このコードを単純なファイル(たとえばtxtファイル)で試してみるとうまくいきます。しかし、このコードをisoファイルで実行すると失敗します。 私はMSDNで、圧縮ファイルはreadfileの同期呼び出しでしか読み込めないことがわかりました。 isoファイルはこのカテゴリにありますか?もしそうなら、 - isoファイルを非同期で読む方法が他にありますか?Readfile async - iso files C++
int _tmain(int argc, _TCHAR* argv[])
{
HANDLE hFile;
DWORD NumberOfBytesRead = 0, dw;
BYTE *buf = (BYTE*)malloc(BUF_SIZE*sizeof(BYTE));
OVERLAPPED overlapped;
overlapped.Offset = overlapped.OffsetHigh = 0;
memset(buf, 0, 1024);
overlapped.hEvent = CreateEvent(NULL, true, false, NULL);
if(NULL == overlapped.hEvent)
printf("error");
hFile = CreateFile("xxx.iso",
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_FLAG_OVERLAPPED | FILE_ATTRIBUTE_NORMAL | FILE_FLAG_NO_BUFFERING ,
NULL);
if (hFile == INVALID_HANDLE_VALUE)
printf("invalid hfile\n");
int i;
i= ReadFile(hFile,
buf,
BUF_SIZE,
&NumberOfBytesRead,
&overlapped);
if(GetLastError() == ERROR_IO_PENDING)
{
dw = WaitForSingleObject(overlapped.hEvent, INFINITE);
if(dw == WAIT_OBJECT_0)
if (GetOverlappedResult(hFile,&overlapped,&NumberOfBytesRead, TRUE) != 0)
{
if (NumberOfBytesRead != 0)
{
printf("!!!\n");
}
}
}
おかげ
Windowsエラー関数GetLastError(http://msdn.microsoft.com/en-us/library/ms679360%28VS.85%29.aspx)を試して、結果のエラーの詳細な説明を投稿してください。 – Dodo
エラーはありません。バッファには何も含まれていません – gln
圧縮ファイルとは、OS圧縮ファイルを意味します。それらはまれです。 –