我想逐行将元素追加到文件中,而不是文件的末尾。 我写了这段代码,但结果是我只能在文件的末尾附加元素。
#include <stdio.h>
#include <stdio.h>
int main(void)
{
static const char filename[] = "m.txt";
FILE *file = fopen(filename, "r+a");
char *a = "ok";
if (file != NULL)
{
char line[128]; /* or other suitable maximum line size */
while (fgets(line, sizeof line, file) != NULL) /* read a line */
{
fputs(a, file); /* write the line */
}
fclose(file);
}
else
{
perror(filename); /* why didn't the file open? */
}
return 0;
}
有些答案提到了缓冲 我在这里与缓冲区有点混淆。这是否意味着我必须在内存中读取多行,然后修改它们?缓冲区与Java中的BufferedReader类相同吗?
答案 0 :(得分:2)
文件不会存储为可以随意追加和操作的行数组,它们是您解释的一大块数据。因此,如果您要做这样的事情,那么您将覆盖当前行之后的文件的其余部分。
您需要做的就是在执行此操作时至少重写整个文件的其余部分。您可以使用缓冲区轻松完成。
文件中的行只是格式和由换行符标记的逻辑点。
答案 1 :(得分:2)
您需要一次读取每一行,根据需要进行修改,然后将整行重写为新文件。然后,当您读取整个文件时,将新文件重命名为旧文件。
或 您将整个文件读入内存,例如数组,每个元素的一行,修改行,并覆盖内容文件。
修改可变长度文本文件的问题在于您需要在插入点之后移位所有数据,这在文件中并不容易。这就是为什么将整个文件读入内存并在那里进行修改或使用随后重命名的临时文件更容易的原因。