这看起来像一个类似的问题this one https://stackoverflow.com/questions/12152311/c-getline-reads-entire-file,但是我认为我的情况实际上可能有点不同。代码如下:
void readOmronResults(string fileName)
{
ifstream inFile(fileName);
ofstream testRead("test_read.txt");
string line;
//getline(inFile, line);
//cout << line << endl;
while (getline(inFile, line))
{
testRead << line << endl;
}
inFile.close();
testRead.close();
cout << "Finished reading omron results" << endl;
}
testRead仅用于调试。输入文件是一个 .csv 文件,如下所示:
IMAGE,RIGHT_EYE_IN_X,RIGHT_EYE_IN_Y,RIGHT_EYE_OUT_X,RIGHT_EYE_OUT_Y,LEFT_EYE_IN_X,LEFT_EYE_IN_Y,LEFT_EYE_OUT_X,LEFT_EYE_OUT_Y
0001_2m_-15P_-10V_-10H,2386,1627,2171,1613,2754,1623,3009,1583
0001_2m_-15P_-10V_-15H,2377,1620,2171,1606,2750,1611,3003,1574
0001_2m_-15P_-10V_-5H,2376,1614,2166,1599,2752,1609,3012,1577
...
如果我运行上面的代码,test_read.txt 中的输出与输入文件中的输出完全相同。但是,如果我恢复这两行注释掉的行,控制台窗口将显示输入文件中的所有行(从第二行开始重复),并且 test_read.txt 为空。从链接的帖子中我猜想这可能与不同操作系统中行结尾的差异有关。我的操作系统是 Windows,根据我的文本编辑器,原始输入文件是 Mac-OS 风格。但如果是因为这个,为什么原来的代码(注释掉这两行)能够给出正确的结果呢?
我的IDE是Visual Studio 2012,我的机器是64位。