我正在编写一个从 .txt 文件中读取文本行的 C++ 程序。不幸的是,这个文本文件是由一个有 20 年历史的 UNIX 程序生成的,它包含许多奇怪的格式字符。
文件的前几行是纯英文文本,可以毫无问题地阅读。但是,每当一行包含一个或多个这些奇怪的字符与文本混合时,整行都会被读取为 字符并且数据会丢失。
真正令人困惑的部分是,如果我手动删除前几行,以便文件中的第一个字符是这些不寻常的字符之一,那么文件中的所有内容都会被完美读取。不寻常的字符显然只是显示为小的 ascii 曲线-箭头、笑脸等,这很好。似乎在我不知情或不同意的情况下,根据阅读的第一行,自动做出了决定。
根据一些谷歌搜索,我怀疑问题可能与语言环境有关,但根据 Visual Studio 调试器,在这两种情况下,ifstream 对象的语言环境属性都是“C”。
读取数据的代码如下:
//Function to open file at location specified by inFilePath, load and process data
int OpenFile(const char* inFilePath)
{
string line;
ifstream codeFile;
//open text file
codeFile.open(inFilePath,ios::in);
//read file line by line
while ( codeFile.good() )
{
getline(codeFile,line);
//check non-zero length
if (line != "")
ProcessLine(&line[0]);
}
//close line
codeFile.close();
return 1;
}
如果有人对可能发生的事情或如何解决它有任何建议,他们将非常受欢迎。