wxWidgets wxFile создает файл, первый раунд работает, создание второго раунда с флагом перезаписи завершается неудачно с Access Denied - PullRequest
0 голосов
/ 29 марта 2020

Не могу понять, почему я получаю «Отказано в доступе».

Я использую 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), но это также приводит к ошибке «Отказано в доступе» ... Создание файлов в блокноте и Notepad ++ работает нормально.

Я что-то упустил? Я не могу понять это, тем более что он создает файл в первый раз.

1 Ответ

3 голосов
/ 29 марта 2020

Удалите 3-й параметр wxFile::Create(..., wxFile::read_write), чтобы он мог принимать значение по умолчанию wxS_DEFAULT.

Третий параметр требует значения или комбинации wxPosixPermissions тип перечисления, не из wxFile::OpenMode типа enum.

...