我正在尝试覆盖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+");
问题仍然存在。
答案 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()关闭它。这对我有用。