如何用C覆盖文件?

时间:2012-02-06 18:39:27

标签: c file-io

我正在尝试覆盖C中FILE的内容。目前我有:

FILE* file  = fopen("filename.txt",  "r+");
fprintf(file, "%d", 1); // regardless of what's in the file, i want to clear it and put 1 in there
...
// legacy code somewhere else in the code base. can't change.
rewind(file);
fprintf(file, "%d", 2);
fflush(file);

但是,这将无法正常工作。结果将是:

1,21

每个后续号码将被写入1的开头。例如:

1,21,31,41,......

我想知道是否有办法始终覆盖文件中的内容,以便生成以下内容:

1,2,3,4,......

任何帮助都将不胜感激。

谢谢。

编辑:

我已将代码更改为:

FILE* file  = fopen("filename.txt",  "w+");

问题仍然存在。

4 个答案:

答案 0 :(得分:15)

您在fopen中决定。只需使用"w""w+"代替"r+"

答案 1 :(得分:2)

据我所知,你不能用fprintf覆盖任何东西。你必须使用fwrite,例如

之类的东西
rewind(file);
char buf[10];
sprintf(buf, "%d", 2);
fwrite(buf, strlen(buf), 1, file);

从您的代码和问题中我并不完全遵循您实际尝试的内容,但希望这有所帮助(在您提出问题后半年)。

答案 2 :(得分:0)

fprintf之前使用以下命令:

freopen(NULL,"w+",file);

答案 3 :(得分:0)

我遇到了同样的问题。我想从我输入的内容中覆盖相同的文件。因此,在尝试不同的方法后,我决定创建另一个指向同一文件的指针。所以我有一个指针读取输入,然后我使用fclose()关闭它,我有另一个指针覆盖同一个文件,我再次使用fclose()关闭它。这对我有用。