wxWidgets wxFile 创建文件第一轮有效,使用覆盖标志创建第二轮失败并拒绝访问

wxWidgets wxFile create file first round works, creating second round with overwrite flag fails with Access Denied

我不明白为什么我总是收到 'Access Denied'。

我正在使用 wxWidgets 在 Windows 上的以下目录中创建一个文件:C:\Users\username\Documents\MyApp。最初该文件不存在,它被创建并且一切都很好。第二次或多次执行此操作会导致错误:error 5: Access Denied。当 运行 将应用程序作为 管理员...

时甚至会发生这种情况

有问题的文件是一个sqlite3数据库文件的备份,一天内可以运行多次备份,因此可以覆盖以前的文件。文件名附加了今天的日期。

创建文件如下:

bool DatabaseBackup::CreateBackupFile(const wxString& fileName)
{
    wxFile file;
    bool success = file.Create(fileName, true, wxFile::read_write);
    if (!success) {
        pLogger->error("Failed to create file {0}", fileName.ToStdString());
    }
    file.Close();
    return success;
}

还有另一个函数可以附加日期以及附加文件名的完整路径,因此结果如下:C:\Users\username\Documents\MyApp\myapp.2020-03-29.db.

我也试过事先检查文件是否存在并使用wxRemoveFile(fileName),但这也会导致访问被拒绝错误...在记事本和记事本++中创建文件工作正常。

我错过了什么吗?我想不通,尤其是因为它是第一次创建文件。

去掉wxFile::Create(..., wxFile::read_write)的第3个参数,可以取默认的wxS_DEFAULT值。

第三个参数需要wxPosixPermissions枚举类型的值或组合,不是wxFile::OpenMode枚举类型。