我考虑在我的程序中添加对输入和输出文件使用相同文件名的可能性,以便它将替换输入文件。
由于处理后的文件可能很大,我认为最好的解决方案是首先打开文件,然后将其删除并创建一个新文件,即这样:
/* input == output in this case */
FILE *inf = fopen(input, "r");
remove(output);
FILE *outf = fopen(output, "w");
(当然,添加了错误处理)
我知道并非所有系统都允许我删除打开的文件,只要remove()
在这种情况下会失败,这是可以接受的。
我担心如果没有任何系统允许我删除该打开的文件然后无法读取其内容。
C99 标准将这种情况下的行为指定为“实现定义的”;SUS 甚至没有提到这个案子。
你的意见/经验是什么?我需要担心吗?我应该避免这样的解决方案吗?
编辑:请注意,这不应该是一些主线功能,而是在用户指定相同文件名作为输入和输出文件的情况下的“最后手段”。
编辑:好的,还有一个问题:在这种特殊情况下,我提出的解决方案是否有可能比仅以只写方式打开输出文件(即像上面一样但没有remove()
调用)做更多的坏事。