以编程方式覆盖现有文件

Overwrite an existing file programmatically

我有一个 QDialogBox,其中有一个上传文件的选项。 我可以上传文件并将它们保存到文件夹中。效果很好。

但是如果文件夹中已经存在一个文件,我不确定如何处理这种情况。

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

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

如果有人可以指出该文档,那就太好了。

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

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

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

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

 if(dir.exists(uploadedFileName))

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

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

为避免出现问题,文件必须以独占访问方式打开,并且如果文件已经存在,则打开方式会立即失败。

如果你想把事情做好,看看这两个答案: