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

Modifying content of a text file in C

我知道在 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 的追加对我不起作用。有没有比将前七个值存储在数组中并必须通过 fopen 在 for 循环中重写这些值更有效的方法?

感谢建议。

Hence, I will be writing to test.txt in a for loop but I only intend to change the values of the last 3 rows at every iteration. The append of fopen does not work for me. Is there a more efficient way to go about this than storing the first seven values in an array and having to rewrite these values in the for loop through fopen?

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

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

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

以适当的模式打开文件后,逐行阅读,例如fgets()。第七行后,用ftell()记录当前文件位置,以备后用。要覆盖最后一行,请使用 fseek() 到 return 到记录的位置,然后写入新值。这可能会在文件末尾,最后一行之后留下垃圾;如果这会成为问题,那么您可以覆盖尾部(例如,使用 space 个字符)。 POSIX 也有 ftruncate() 可以用来剪掉任何尾巴,但这不是标准 C 的一部分。