掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
Win32APIのReadFile関数の仕様で不明瞭な点がいくつかあるのですが (ID:63335)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
tetrapodさん、レスありがとうございます。 さっそく今、下記のプログラムを実行してみたところ int _tmain(int argc,LPCTSTR argv[]) { ::_tsetlocale(LC_ALL,_T("")); HANDLE hFile; //開く if((hFile=::CreateFile( _T("test.data"), //テスト用ファイル(先頭から0x01,0x02...0x09と9byteデータが入っている) GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL)) == INVALID_HANDLE_VALUE) { ::_putts(_T("Failed to open the file.")); return 0; } //読み込む DWORD data; DWORD bytesRead; BOOL result; DWORD errorCode; for(unsigned int count=0;count<4;count++) { result =::ReadFile( hFile, &data, sizeof(data), &bytesRead, NULL ); errorCode =::GetLastError(); ::_tprintf( _T("-------------------------\n") _T("data :%#010x\n") _T("bytesRead :%u\n") _T("result :%s\n") _T("errorCode :%u\n"), data, bytesRead, (result == TRUE)?_T("TRUE"):_T("FALSE"), errorCode ); } //閉じる ::CloseHandle(hFile); return 0; } 実行結果は ------------------------- data :0x04030201 bytesRead :4 result :TRUE errorCode :0 ------------------------- data :0x08070605 bytesRead :4 result :TRUE errorCode :0 ------------------------- data :0x08070609 bytesRead :1 result :TRUE errorCode :0 ------------------------- data :0x08070609 bytesRead :0 result :TRUE errorCode :0 となりました。 ドキュメントに書いてあるわけではありませんが、 (戻り値がTRUE) && (*lpNumberOfBytesRead < nNumberOfBytesToRead)で ファイルが終端に達した。*lpNumberOfBytesReadに実際に読み取れたバイト数が入る。 (戻り値がTRUE) && (*lpNumberOfBytesRead == 0)で すでに終端に達している、もしくは超えている。 という解釈でいこうと思います。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.