C++ 无法读取C+;中带括号字符的二进制文件+;

C++ 无法读取C+;中带括号字符的二进制文件+;,c++,C++,我有一个函数,可以读取文件并检查其内容。 该文件包含一些二进制内容以及非字母字符,如()、=、除以符号等。 进行读数的功能是: int FindMyWord(const char *fileName) { ifstream myFile (fileName); if(!myFile) return false; string wordSearch = "MyWord"; string line; int result = 0; wh

我有一个函数,可以读取文件并检查其内容。 该文件包含一些二进制内容以及非字母字符,如
()
=
除以符号等。
进行读数的功能是:

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;
}
我有以下两个问题:

  • 如果一行包含二进制字符,那么它不是读取整行,而是读取第一个字(至少我在VS2010中打开文件时观察到了这一点)
  • 当它遇到字符
    作为行首时,while循环终止&打印
    printf()
  • 如果
    string::getline()
    无法读取此类字符,那么解决方案是什么? 多谢各位

    更新:文件中某些二进制数据的图像:


    通读。如果有任何异常行为,应检查流上的故障位。

    文本输入流不应在括号字符上出现故障


    如果您确实需要一个二进制流,请使用ifstream(filename,std::ios::binary)

    您可以删除我添加到该
    If
    中的括号。对不起,我没有找到您。文本输入流不应该在括号字符上失败。如果您确实需要一个二进制流,请使用
    ifstream(filename,std::ios::binary)正是这样,尽管C和C++都尝试忽略了差异,但是字节不是字符。如果你正在读取原始的任意字节作为文本,期待奇怪。@皮特,你的答案是正确的,现在它起作用了。请你把它加成一个答案,这样我就可以把它标记为正确答案了?谢谢。