2012-02-06 117 views
3

我试图覆盖C中的文件的内容,目前我有:如何覆盖C文件?

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+"); 

的问题仍然存在。

+2

只要打开它为“W +” – BlackBear 2012-02-06 18:41:10

回答

11

你决定在fopen。只需使用"w""w+"而不是"r+"

+0

喜博,对不起你的建议是行不通的:(也许我没有做正确的事情 – czchlong 2012-02-06 18:45:35

+0

也许我只是解决了你的第一个问题 - 如何清除旧的文件如果。其他代码做倒带,我们不能真的停止。 – 2012-02-06 18:50:02

+0

所以如果其他代码不做倒带,那么问题可以修复? – czchlong 2012-02-06 18:56:14

2

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

rewind(file); 
char buf[10]; 
sprintf(buf, "%d", 2); 
fwrite(buf, strlen(buf), 1, file); 

从你的代码和问题我不完全按照你实际尝试做什么,但希望这有助于(你问了半年后)。

0

使用以下命令fprintf前:

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

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