以编程方式覆盖现有文件

时间:2015-02-06 19:55:53

标签: qt pyqt

我有一个QDialogBox,其中有一个上传文件的选项。 我可以上传文件并将其保存到文件夹中。它工作正常。

但是如果文件夹中已经存在文件,我不知道如何处理这种情况。

我想警告用户已存在同名文件。

在这种情况下我是否可以使用Windows API? (因为当我们手动保存现有文件时,我们会收到警告,如何使用它?)

如果有人能指出我的文档,那就太棒了。

3 个答案:

答案 0 :(得分:2)

如果您使用的是QFileDialog,则默认情况下会激活confirmOverwrite,因此,如果getSaveFileName()返回非空的QString,则表示用户接受覆盖该文件。换句话说,你得到一个空的QString。 然后,您可以检查该文件是否存在,并在这种情况下将其删除,但您知道该用户对此是好的。

答案 1 :(得分:1)

保存文件时始终存在潜在的竞争条件。检查文件是否存在是不安全,因为其他一些进程可能会在检查和实际写入文件之间创建一个具有相同名称的文件。

为避免出现问题,必须使用独占访问权限打开文件,并且如果文件已存在则立即失败。

如果你想做正确的事情,请看看这两个答案:

答案 2 :(得分:0)

如果您没有使用QFileDialog,可以使用QDir::entryList()获取目录中的文件名。

 QDir dir("/path/to/directory");
 QStringList fileNames = dir.entryList();

然后遍历文件名,您可以看到是否存在具有相同名称的文件。如果你需要它,我也可以举一个例子。它是C ++,但很容易适应Python。

编辑:Smasho刚建议使用QDir :: exists()方法。您可以使用此方法检查目录中是否存在文件名,而不是像我建议的那样进行迭代。

 if(dir.exists(uploadedFileName))