0

ファイルを読み込んで内容を確認する機能があります。このファイルには、、、、など()のアルファベット以外の文字とともにいくつかのバイナリコンテンツが含まれています。読み取りを行う関数は次のとおりです。=divided by symbol

int FindMyWord(const char *fileName)
{
    ifstream myFile (fileName);
    if(!myFile)
        return false;
    string wordSearch = "MyWord";
    string line;
    int result = 0;
    while(getline(myFile, line))
    {
        if(line.find(wordSearch) != string::npos)
            result++;
    }
    //if(!myFile.eof() || !myFile)
    if(!myFile)
        printf("Problem Reading the File: %s\n", (const char *)fileName);

    myFile.close();
    return result;
}

私はこれらの2つの問題を抱えています:

  1. 行に2進文字が含まれている場合、その行は完全な行を読み取っていません。最初の単語を読み取っているだけです(少なくとも、VS2010でファイルを開いて観察しているものです)。
  2. (行頭の文字に遭遇すると、whileループが終了し、printf()が出力されます。

string::getline()そのような文字を読むことができない場合、解決策は何ですか?ありがとうございました。

更新:ファイル内のいくつかのバイナリデータの画像:

ここに画像の説明を入力してください

4

2 に答える 2

2

テキスト入力ストリームは、ブラケット文字で失敗してはなりません。

実際にバイナリ ストリームが必要な場合は、ifstream(filename, std::ios::binary) を使用します。

于 2013-03-11T14:48:21.003 に答える
0

cppreference.com で std::getline ドキュメントを読んでください。failbitおかしな行動をしている場合は、ストリームで確認してください。

于 2013-03-11T13:55:58.573 に答える