读取文件不会显示刚刚写入的更改

时间:2014-03-22 20:01:35

标签: c++ fstream

我是c ++的新手。我制作了以下程序,该程序成功运行并完成了预期的工作,即将一个文件的数据附加到另一个文件中。

#include<iostream>
#include<fstream>
#include<stdio.h>

using namespace std;

void show(const char *file)
{
  char data[90];
  fstream f(file,ios::in);
  while(!f.eof())
  {
    f.getline(data,90,'\n');
    puts(data);
  }
}
int main()
{
  char data[90];
  cout<<"Contents of files before data integration.\nFile 1:\n";
  show("file1.txt");
  cout<<"\nFile 2\n";
  show("file2.txt");
  fstream f1("file1.txt",ios::out|ios::app);
  fstream f2("file2.txt",ios::in);
  while(!f2.eof())
  {
    f2.getline(data,90,'\n');
    f1<<data<<'\n';
  }
 cout<<"\n\nFile 1 after data integration: \n\n";
 show("file1.txt");
}

当我单独检查时,文件成功地将数据附加到file1中,但程序仅打印其旧内容。任何人都可以告诉我可能的原因是什么,以及相同的补救措施。

2 个答案:

答案 0 :(得分:2)

如果正在缓冲它。

冲洗流,旧文件的气味消失。

请参阅http://www.cplusplus.com/reference/ostream/ostream/flush/

答案 1 :(得分:2)

在关闭流f1之前,已写入其中的内容可能驻留在缓冲区中。如果发生这种情况,最后一次调用show将显示文件的旧内容或(可能更糟)新内容的不完整版本。

正如Ed Heal在他的回答中所说的那样,法拉盛可以做到这一点,但我认为这样做的正确方法是在写作结束后立即关闭流f1。 (如果您愿意,也可以与f2相同。)在while循环之后和最后一次调用show之前添加以下行:

f1.close();
f2.close();