我正在编写一个Qt / C ++程序来执行长时间运行的模拟,为了防止数据丢失,我编写了一些简单的自动保存行为。程序定期保存到用户的临时目录(使用QDir :: temp()),如果程序正常关闭,则删除该文件。如果程序启动并在该目录中看到该文件,它会假定先前的实例崩溃或被强制结束,并提示用户加载它。
现在这里是复杂的 - 即使一次使用多个程序实例,我也希望这个功能正常工作。因此,当程序加载时,它不能只查找自动保存文件的存在。如果它找到了一个,它需要确定该文件是否是由正在运行的实例创建的(在这种情况下,没有任何错误,也没有什么可做的),或者它是否被崩溃或被强制结束的实例遗留下来(在在哪种情况下它应该提示用户加载它。)
我的程序适用于Windows / Mac / Linux,那么使用Qt或其他跨平台方式实现此目的的最佳方法是什么?
修改 注释建议使用进程标识符,我可以使用QCoreApplication :: applicationPid()获得。我喜欢这个想法,但是当程序加载并看到名称中有某个PID的文件时,它如何查看其他正在运行的实例(如果有)以查看是否存在匹配?
答案 0 :(得分:0)
您可以简单地使用QSaveFile,正如文档所述: -
QSaveFile类提供了一个安全写入文件的接口。
QSaveFile是一个用于编写文本和二进制文件的I / O设备,如果写入操作失败,则不会丢失现有数据。
写入时,内容将写入临时文件,如果没有错误发生,commit()会将其移动到最终文件。这可确保在写入时发生错误时最终文件中的数据不会丢失,并且最终位置不会出现部分写入的文件。将整个文档保存到磁盘时始终使用QSaveFile。
对于多个实例,您只需要在文件名中反映出来。