我试图弄清楚如何在文件的开头(标题)写一个新的文本行。我知道我可以打开文件,或者寻找文件的开头,但如果我用它写,它会覆盖那里的内容。我是否必须先写一个新文件,然后逐行写入其他数据,还是有更好的方法?
示例文件:
1, 01/01/09, somedata, foo, bar
2, 01/02/09, somedata, foo, bar
3, 01/03/09, somedata, foo, bar
我想结束
3, 1-3, 01/04/09
1, 01/01/09, somedata, foo, bar
2, 01/02/09, somedata, foo, bar
3, 01/03/09, somedata, foo, bar
编辑:
这就是我最终做的事情:
FILE *source;
FILE *output;
char buffer[4096];
size_t bytesRead;
memset(buffer, 0, sizeof(buffer);
source = fopen("sourcefile.txt", "r");
output = fopen("output.txt", "w+");
fprintf(output, "my header text\n");
while(!feof(source))
{
bytesRead = fread(&buffer, 1, sizeof(buffer), source);
fwrite(&buffer, 1, bytesRead, output);
}
fprintf(output, "my footer text");
fclose(source);
fclose(output);
remove(source);
rename("output.txt", "source.txt");
答案 0 :(得分:6)
您必须重写整个文件,但这并不一定意味着您必须逐行读取和写入原始数据。按行读取相对较慢,因此如果文件足够小以适合内存,请在一个大块(或大块)中读取它,然后在写入新数据后将其写回。
答案 1 :(得分:1)
好吧,可能非常最简单的事情是注意你想要做的是等同于unix cat
命令。如果您使用的是unix,则可以从c中调用它。或者您可以在gnu textutils中阅读源代码。
但无论如何,所有这些解决方案都只会重写文件!
答案 2 :(得分:0)
你必须打开一个新文件并重新写一遍。