c ++读取txt到字符串错误

时间:2011-12-05 13:10:57

标签: c++ string text-files

这个项目是用c ++编写的。我试图移动文本文件,并在屏幕上每次打印80个字符长的子文件。下一步是更新x的起始位置,然后再次打印。我的目标是在幻灯片上“滑动”。当我开始第二个流操作时,我没有收到错误,但屏幕上没有输出任何文本。 谁知道我做错了什么?在执行新操作之前是否必须关闭文件?感谢名单

ifstream ifs("data.txt");
string line;
string subline;
int x=5;

while(getline(ifs,line)) {
    subline=line.substr(x,80);
    cout << subline;
}

system("pause");
system("cls");
x++;


//my issue!
while(getline(ifs,line)) {
    subline=line.substr(x,80);
    cout << subline;
}

3 个答案:

答案 0 :(得分:3)

是的,您需要在使用后关闭该文件。始终清理您在编程中所做的每件事,尤其是文件操作。

在对文件进行任何实际操作之前,应检查该文件是否确实已成功打开。 当您以(使用构造函数)的方式打开文件时,如果文件打开操作失败,则没有任何内容返回给您。

你可以检查ifstream方法'good()'以查看流是否成功打开,或'fail()'以查看它是否没有。

e.g。

ifstream ifs("data.txt");
if( ifs.fail() )
{
  std::cerr << "There was an error opening the file" << std::endl;
  return -1; // use -1, or some sort of non-zero number representing your error code to the command line
}

// Do your reading / writing

ifs.close();

我建议您阅读this info,了解使用ifstream时可以使用的一些功能。

答案 1 :(得分:2)

您已到达文件的末尾,它将设置“eof”状态位(并删除“good”状态位)。这意味着基本上所有后续的读操作都会失败。

简单的解决方法是在x ++之后添加:

ifs.clear(); // Get rid of the 'eof' state bit
ifs.seekg(0, ios_base::beg); // Go back to the beginning of the file

答案 2 :(得分:1)

您应该在第二次打开文件之前尝试关闭该文件。 问题是文件指针在执行第二次读取时指向最后一个。 尝试将文件指针重置为开头或重新打开文件。