2009-06-09 7 views
0

正しいテキストを読み取るために、以下のコードを作成するにはどうすればよいですか?私のテキストファイルには、C++へのこんにちはがありますが、テキストの最後には改行があります。以下のコードでは、私のreadBufferには常に余分な文字が含まれています。ReadFile()を使用してテキストファイルから文字列を読み取る際の問題

DWORD byteWritten; 
int fileSize = 0; 

//Use CreateFile to check if the file exists or not. 
HANDLE hFile = CreateFile(myFile, GENERIC_READ, FILE_SHARE_READ, NULL, 
          OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); 

if(hFile != INVALID_HANDLE_VALUE) 
{ 
    BOOL readSuccess; 
    DWORD byteReading; 
    char readBuffer[256]; 
    readSuccess = ReadFile(hFile, readBuffer, byteReading, &byteReading, NULL); 

    if(readSuccess == TRUE) 
    { 
     TCHAR myBuffer[256]; 
     mbstowcs(myBuffer, readBuffer, 256); 

     if(_tcscmp(myBuffer, TEXT("Hello welcome to C++")) == 0) 
     { 
      FindClose(hFile); 
      CloseHandle(hFile); 

      WriteResultFile(TRUE, TEXT("success!")); 
     } 
    } 
} 

おかげで、

+0

私の投稿を編集するためのrobboticに感謝します。 – Bopha

+0

あなたの主な問題ではありませんが、あなたはwchar_tとTCHARを混ぜ合わせています。 mbstowcs()はchar *をwchar_t *に変換します。 TCHARはcharまたはwchar_tのいずれかです。 wchar_tを使用する場合は、それを使用します。 TCHARを使用する場合は、mbstowcs()が必要かどうかをテストする必要があります。 –

+0

s/whetehr/// –

答えて

0

ファイルから改行文字を削除するか、文字列「C++へこんにちはようこそ」の存在を確認するために_tcsstr使用しますか。

+0

あなたの提案に続いて_tcscmpを_tcsstrに変更すると、commparisonのために動作します。ありがとうございます。 私のテキストファイルには数値があり、その値を使用しなければならないので、私のreadBufferは数字の横に余分な文字を含むでしょうか? 残念ながら、他のプログラムによって他の人が書いたテキストファイルの内容は変更できませんので、そのまま読まなければなりません。 – Bopha

2

いくつかの問題があります。

  • あなたはのReadFile(にパラメータを「読むためにバイトの#」として初期化されていないデータ(byteReading)を渡しているが)。
  • ファイルの作成方法によっては、ファイルの内容に0バイトの終了がない場合があります。このコードでは、ターミネータが存在することを前提としています。
  • FindClose(hFile)は意味をなさない。 CloseHandle(hFile)だけで十分です。
  • CreateFile()が成功した場合は、CloseHandleを呼び出す必要があります。現在、あなたが探している文字列を見つけた場合にのみ、それを呼び出します。

これはバグではありませんが、バッファをゼロ初期化すると便利です。これにより、読み込まれているデータの量を正確にデバッガで確認することができます。

+0

あなたは正しいです。ByteReadingは使用しませんが、ReadFile()では代わりに256を使用します。 FindClose()、それは私の他のプログラムで使用されていましたが、必須でしたが、このプログラムはそれを必要としませんので、私はすべてコメントしました。 closeHandle()は、文字列比較の内部に置くべきではなく、if文の外側にあるべきです。実際はこれは私がかわいいと私のプログラムから貼り付けるので、いくつかの文が欠落している小さな部分のコードです。 – Bopha

2
HANDLE hFile = CreateFile(myfile, GENERIC_READ, FILE_SHARE_READ, NULL, 
    OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); 

    if(hFile != INVALID_HANDLE_VALUE) 
    { 
    BOOL readSuccess; 
    DWORD byteReading = 255; 
    char readBuffer[256]; 
    readSuccess = ReadFile(hFile, readBuffer, byteReading, &byteReading, NULL); 
    readBuffer[byteReading] = 0; 
    if(readSuccess == TRUE) 
    { 
     TCHAR myBuffer[256]; 
     mbstowcs(myBuffer, readBuffer, 256); 

     if(_tcscmp(myBuffer, TEXT("Hello welcome to C++")) == 0) 
     { 
     rv = 0; 
     } 
    } 
    CloseHandle(hFile); 
    } 

が、私は二つのことを参照してください。あなたは0

  • はCloseHandleで文字列を終了する必要がありますので、あなたがバイトを読んでいる
    • byteReadingが初期化されていませんが十分です
  • 関連する問題