使用cstdio
,覆盖文件的最安全方法是什么?在这种情况下,“安全”意味着文件不可能不完整或损坏;该文件将被完全覆盖,或者如果出现问题,它将是旧文件。
我想最好的方法是创建一个临时中间文件,然后在该中间文件完成后覆盖旧文件。如果这实际上是最好的方法,那么还有一些其他问题似乎是可能的,尽管很少见。
我想这有一个很好的做法,但我找不到它。这是用于保存的游戏数据;只有一个文件,而且每次都会覆盖整个文件,无需担心部分覆盖或附加。
正如其他人所说,保留现有文件,并写入一个新文件。如果这是非常重要的(也就是说,用户不可能恢复信息),请确保有一个“备份”文件周围以及(例如,如果你的程序保存abc.config
,留下abc.old.config
或abc.backup
[如果你要保证这个名字适用于任何地方,.cfg
并且.bak
可能是更好的选择])。
编写文件时,请在文件中放置某种结束标记,以确保文件是完整的。如果您想避免对文件进行“用户编辑”,您可能还需要内容的校验和(sha1、md5 或类似的)。如果结束标记不存在,或者校验和错误,那么您就知道该文件是“坏的”,所以不要使用它。去备份。
fstream fout("abc.tmp");
)remove("abc.bak");
)rename("abc.cfg", "abc.bak");
)rename("abc.tmp", "abc.cfg"
);对于所有步骤(特别是写入实际数据),检查错误。您需要决定哪里可以出错,哪里可以出错(remove
例如,不存在的文件是可以的,但是如果rename
不起作用,您可能应该停止,否则您可能会遇到一些不好的事情)。
加载文件时,检查所有步骤,如果出错,返回备份文件。
归档时间: |
|
查看次数: |
2468 次 |
最近记录: |