【问题标题】:How to append text to a .txt file iteratively in c如何在c中迭代地将文本附加到.txt文件
【发布时间】:2017-01-30 16:08:27
【问题描述】:

我在迭代写入 C 中的 .txt 文件时遇到困难。

我需要在 for 循环的每次迭代之后写出一系列值,这样如果我在任何时候停止程序运行,我都不会丢失我已经收集的数据。

如果我运行整个循环,我的代码可以工作,但是如果我使用 ctrl+c 命令停止程序运行,因为它花费的时间太长,我的 .txt 文件是空的。

我不知道这是否是由 ctrl+c 命令引起的,因为文件没有机会关闭,但有其他解决方案吗?我应该在每次循环迭代期间打开文件并关闭它并附加到 .txt 文件吗?我认为这可能会导致之前写入 .txt 文件的数据被覆盖,也会导致运行时间增加。

这是我目前正在做的一个非常简单的例子,希望它能说明我正在努力完成的事情:

FILE *fp;
fp = fopen("Output.txt", "w");
int a = 0;
int b = 0;
int c = 0;
for(int i=0;i<500;i++)
{
    a = a+1;
    b = b+1;
    c = c+1;
    printf("a = %d\tb = %d\tc = %d\n"); // printing to console
    fprintf(fp,"%d,%d,%d\n",a,b,c); // printing to file
}
fclose(fp);

【问题讨论】:

  • 在每次迭代中添加fflush(fp);。或者将其设置为无缓冲。

标签: c printf fopen


【解决方案1】:

您需要在每个fprintf 到文件之后fflush

如果流指向未输入最近操作的输出流或更新流,fflush()将导致该流的任何未写入数据写入文件,以及最后一次数据修改和最后一个文件底层文件的状态更改时间戳应标记为更新。

也就是说,

for(int i=0;i<500;i++)
{
    a = a+1;
    b = b+1;
    c = c+1;
    printf("a = %d\tb = %d\tc = %d\n"); // printing to console
    fprintf(fp,"%d,%d,%d\n",a,b,c); // printing to file
    fflush(fp); /* <== here */
}

PS:空白不是稀缺商品。

【讨论】:

  • 完美运行。谢谢。
猜你喜欢
  • 1970-01-01
  • 2011-01-24
  • 1970-01-01
  • 2018-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多