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

Reading a file does not show changes that were just written

本文关键字:读取 显示 文件      更新时间:2023-10-16

我是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 2n";
  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<<"nnFile 1 after data integration: nn";
 show("file1.txt");
}

当我单独检查时,文件成功地附加了file1中的数据,但程序只打印其旧内容。谁能告诉我这可能是什么原因和补救方法?

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

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

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

正在缓存

冲洗小溪,旧文件的气味就会消失。

见http://www.cplusplus.com/reference/ostream/ostream/flush/