在QFile::副本文档中,它说
如果名为newName的文件已经存在,copy()返回false (也就是说,QFile不会覆盖它)。
但即使目标存在,我也需要复制一个文件。在Qt中有什么解决办法吗?
删除该文件是显而易见的解决方案,但它会引发一个竞争条件.
发布于 2013-02-18 12:19:46
if (QFile::exists("/home/user/dst.txt"))
{
QFile::remove("/home/user/dst.txt");
}
QFile::copy("/home/user/src.txt", "/home/user/dst.txt");发布于 2013-02-18 12:22:25
当然,最明显的解决方案是在进行复制之前删除存在的文件。
但是,请注意,这样做为经典的种族条件打开了代码,因为在一个典型的多任务操作系统上,不同的进程可能会在应用程序的删除和复制调用之间重新创建文件。这将导致复制仍然失败,因此您需要做好准备(也许还需要重新尝试删除,但这可能会引入计数的需要,这样您就不会永远尝试、不停地尝试)。
发布于 2014-10-08 05:06:32
我能想到的最简单的尝试是:
while !QFile::copy("/home/user/src.txt", "/home/user/dst.txt")
{
QFile::remove("/home/user/dst.txt");
}但这仍然不是一个真正的解决方案,因为一些竞赛条件是不会阻止删除的。
我目前正在寻找一种方法来处理作为输出的网页的编写,但是不需要在删除和复制之间进行自动刷新。
https://stackoverflow.com/questions/14935919
复制相似问题