gpt4 book ai didi

c - c、fclose()、remove()、rename() 中的奇怪行为

转载 作者:太空宇宙 更新时间:2023-11-04 03:41:24 24 4
gpt4 key购买 nike

我的程序旨在能够将一行文本附加到 *.txt 文件(通过 fopen(file,"a"))或编辑特定行(通过 fopen(文件,"w"))

如果我从编辑行开始,我可以编辑任意多行。但是一旦我第一次添加一行,我就不能再编辑行了。

“编辑”功能(代码如下)将旧文件中的所有行写入新的临时文件。到达我要编辑的行,它将更改的行写入临时文件,并以从旧文件复制其余行结束。 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;
}

谁能告诉我为什么程序会这样?我需要改变什么?谢谢...

最佳答案

实际上,在 appendLine() 调用之后,文件上有一个 fopen() 调用。我想我不知何故不小心把它插在那里了。

所以答案是:由于文件仍处于打开状态,因此无法删除或重命名。

关于c - c、fclose()、remove()、rename() 中的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28338853/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com