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;
}

我有这两个问题:

  1. 如果一行包含二进制字符,那么它不会读取完整的行,只是读取第一个单词(至少这是我通过在 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 回答