我的程序可以将一行文本附加到* .txt文件(通过fopen(file,"a")
)或编辑特定行(通过fopen(file,"w")
)
如果我从编辑行开始,我可以编辑尽可能多的行。 但是,当我第一次添加一行时,我就无法再编辑行了。
"编辑" function(代码跟随)将旧文件中的所有行写入新的临时文件。到达我想要编辑的行,它将更改的行写入临时文件,最后复制旧文件中的其余行。在EOF之后我关闭两个文件,删除旧文件并重命名临时文件。
据我所知,通过调试我的程序,方法editLine()
正在正确编写临时文件。它只是不会删除旧文件并重命名临时文件。只要我从不附加一条线,它就能很好地工作。
代码:
void editLine(int line)
{
FILE *fin, *fout;
mystruct a;
int i = 1;
fin = fopen(DATAFILE,"r"); //"r" -> read
fout = fopen(TEMPFILE,"w"); //"w" -> write
while(mystruct_read(&a, fin)!=EOF)
{
if (line==i) getChanges(&a);
mystruct_write(&a,fout);
i++;
}
fclose(fin);
fclose(fout);
remove(DATAFILE);
rename(TEMPFILE, DATAFILE);
return;
}
void appendLine()
{
FILE *file;
mystruct a = {0};
file = fopen(DATAFILE,"a");
getChanges(&a);
mystruct_write(&a,file);
fclose(file);
return;
}
有谁可以告诉我为什么程序会像那样?我需要改变什么?谢谢......
答案 0 :(得分:1)
实际上fopen()
电话后,文件上有appendLine()
次呼叫。
我想我不小心把它插在了那里。
所以答案是: 由于文件仍处于打开状态,因此无法删除或重命名。
答案 1 :(得分:0)
我有一些建议:
1)尝试在fclose()
和remove()
之间添加延迟,也许操作系统会在关闭后阻止该文件一段时间。
2)在关闭文件之前尝试使用fflush()
。