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++都尝试忽略了差异,但是字节不是字符。如果你正在读取原始的任意字节作为文本,期待奇怪。@皮特,你的答案是正确的,现在它起作用了。请你把它加成一个答案,这样我就可以把它标记为正确答案了?谢谢。