寻求文件的开头

时间:2009-04-20 14:20:30

标签: c file-io

我有一个小代码块,应该将文本附加到文件的请求。但是它仍然只会添加到文件的末尾。我认为倒带将指针设置到文件的前面,因此当我使用fprintf添加文本时,它应该添加到前面。我怎么能改变这个?

fp = fopen("Data.txt", "a");
rewind(fp);
fprintf(fp, "%s\n", text);
fclose(fp);

Text是要添加到文件前面的char数组

3 个答案:

答案 0 :(得分:12)

1)不要以附加模式打开。

在附加模式下打开时,无论搜索位置如何,所有写入都将转到文件末尾。

http://www.opengroup.org/onlinepubs/009695399/functions/fopen.html

  

使用追加模式打开文件(a as   模式中的第一个字符   论证)将导致所有后续的   写入要强制执行的文件   然后是当前的文件结束,无论如何   干预对fseek()的调用。

2)没有“a”的开场仍然不会做你想要的。使用ANSI / POSIX文件操作无法插入文件,因为考虑到大多数文件系统存储数据的方式,插入不是一个简单的操作。

您需要打开一个新文件,编写新数据,然后追加旧文件,否则您需要在块中向前移动数据。对于大型文件而言,这两种选项都是非常低效的,与最后附加相比,如果您需要程序或机器能够意外死亡而不损坏数据,更不用说容易出错。因此,如果这是一个日志文件或类似文件,则可能值得重新设计,以便您可以将新数据写入结尾,然后在从日志中准备报告时将其全部反转。

答案 1 :(得分:4)

您可以替换文件中的数据,但不能在文件的最后任何位置添加或插入数据。

答案 2 :(得分:0)

只需使用您的数据创建一个新文件,然后将旧数据附加到您创建的此文件中。