在C中修改文本文件的内容

时间:2017-07-07 21:42:56

标签: c fopen

据我所知,在C中,如果我有一个现有的文本文件“test.txt”,调用fopen(“test.txt”,“w”)将覆盖“test.txt”的现有内容。

我试图找到一个关于我的问题的有效方法:假设我在test.txt中有10行,每行包含一个数字。 test.txt可以引用我所拥有的PDE求解器的输入值。我想对最后3个参数进行灵敏度分析,即保持test.txt中的前7个数字固定,我想为最后3行尝试不同的值。因此,我将在for循环中写入test.txt,但我只打算在每次迭代时更改最后3行的值。 fopen的追加对我不起作用。有没有比将前7个值存储在数组中并且必须通过fopen在for循环中重写这些值更有效的方法呢?

建议表示赞赏。

1 个答案:

答案 0 :(得分:1)

  

因此,我将在for循环中写入test.txt,但我只是打算   在每次迭代时更改最后3行的值。追加   fopen对我不起作用。有没有更有效的方法   关于此,而不是将前七个值存储在一个数组中并具有   通过fopen在for循环中重写这些值?

无论如何,您似乎需要读入并存储前七个值。但是,您确实可以避免重写它们。首先,以读/写模式打开文件而不截断:

FILE *input = fopen("test.txt", "r+");

读/写模式与追加模式(“a”或“a +”)的不同之处在于,在前一种情况下,文件最初位于开头,写入始终转到当前文件位置,而在后一种情况下,文件最初定位在最后,写入总是结束。

以适当的模式打开文件,逐行读取,例如与fgets()。在第七行之后,使用ftell()记录当前文件位置以供稍后参考。要覆盖最后一行,请使用fseek()返回记录位置,然后只写入新值。这可能会在最后一行之后的文件末尾留下垃圾;如果这将是一个问题,那么你可以覆盖尾部(例如使用空格字符)。 POSIX也有ftruncate()你可以用它来剪辑任何尾部,但这不是标准C的一部分。