C 文本将附加在文件的开头,而不是文件的结尾

C 文本将附加在文件的开头,而不是文件的结尾,c,file,append,C,File,Append,我有一个奇怪的错误,我附加的文本被添加到文件的开头而不是结尾。这最终使一切都倒退了 代码: 应写入raid1.txt的内容: mmmmiiiieeeeaaaa aaaaeeeeiiiimmmm 我试过使用fseek,但没有用。如果有人能帮我,或者给我指出正确的方向,那会有帮助的。这是在C中使用bash编译和运行程序完成的。传递的参数是test.txt 4 0 4。我想您看到的问题是由于每次调用writeFile都会打开一个新的文件句柄,写入该文件,然后返回。使用完文件句柄后,应将其关闭,这会

我有一个奇怪的错误,我附加的文本被添加到文件的开头而不是结尾。这最终使一切都倒退了

代码:

应写入raid1.txt的内容:

mmmmiiiieeeeaaaa
aaaaeeeeiiiimmmm

我试过使用fseek,但没有用。如果有人能帮我,或者给我指出正确的方向,那会有帮助的。这是在C中使用bash编译和运行程序完成的。传递的参数是test.txt 4 0 4。

我想您看到的问题是由于每次调用
writeFile
都会打开一个新的文件句柄,写入该文件,然后返回。使用完文件句柄后,应将其关闭,这会将文件缓冲区刷新到文件并释放句柄

我认为这里发生的事情是,每次都会打开一个新的句柄,并且每个句柄都只写入少量数据,因此不会刷新到磁盘。然后,程序将退出,操作系统将清理过时的文件句柄,并将其刷新到磁盘。作为一个猜测,我猜想它是以相反的顺序进行清理的,因此文件的外观是向后写入的

更新您的
writeFile
,以包含一个应该可以解决问题的结束日期

FILE *out = fopen(raidName, "a");   
fprintf(out, "%s", buffer);
fclose(out);
如果打开文件以便在调用
writeFile
的循环中写入,并传递句柄,然后只需打开并关闭一次,可能会更好

值得添加的是,在其他地方,您也打开了文件


HTH

我想您看到的问题是由于每次调用
writeFile
都会打开一个新的文件句柄,写入该文件,然后返回。使用完文件句柄后,应将其关闭,这会将文件缓冲区刷新到文件并释放句柄

我认为这里发生的事情是,每次都会打开一个新的句柄,并且每个句柄都只写入少量数据,因此不会刷新到磁盘。然后,程序将退出,操作系统将清理过时的文件句柄,并将其刷新到磁盘。作为一个猜测,我猜想它是以相反的顺序进行清理的,因此文件的外观是向后写入的

更新您的
writeFile
,以包含一个应该可以解决问题的结束日期

FILE *out = fopen(raidName, "a");   
fprintf(out, "%s", buffer);
fclose(out);
如果打开文件以便在调用
writeFile
的循环中写入,并传递句柄,然后只需打开并关闭一次,可能会更好

值得添加的是,在其他地方,您也打开了文件


HTH

还有一件事我看到您在检查值(k)中使用scanf的局部变量地址,这些仅为局部变量,永远不会反映在Main()中。

还有一件事我看到您在检查值(k)中使用scanf的局部变量地址,这些仅为局部变量,永远不会反映在Main()中

@ikegami很抱歉,我对这件事还是有点陌生。我没有看到任何马车返回?这不是你使用a\r的时候吗?@ikegami对不起,我对这个还是有点陌生。我没有看到任何马车返回?当你使用a时不是吗?太棒了!工作得很好。非常感谢!令人惊叹的!工作得很好。非常感谢!啊,你说得对。我可能不想使用全局变量。我想我只需要检查main中的值?啊,你说得对。我可能不想使用全局变量。我想我只需要检查main中的值?