API-интерфейс DeleteFile не удаляет файл, пока процесс не завершится - PullRequest
0 голосов
/ 29 апреля 2020

Я реализовал следующую функцию, в которой он получает путь к файлу, а затем пытается удалить его из файловой системы.

Функция не работает должным образом, потому что, когда я вызываю ее для удаления файла, файл не будет удален, пока я не закрою программу. Когда я закрываю программу, указанный мной файл будет удален. Я не знаю, что не так с кодом:

bool DeleteFileOnSystem(const char* arg_path, const char* arg_name_file)
{
    char c_FilePath[MAX_PATH];

    strcpy_s(c_FilePath, MAX_PATH, arg_path);
    strcat(c_FilePath, arg_name_file);

    if (DeleteFile(c_FilePath))
        return true;
    else
        return false;
}

Ответы [ 2 ]

2 голосов
/ 29 апреля 2020

Когда вы открываете документацию DeleteFile , вы можете найти следующее утверждение:

Функция DeleteFile помечает файл для удаления при закрытии. Поэтому удаление файла не происходит до тех пор, пока последний дескриптор файла не будет закрыт. Последующие вызовы CreateFile для открытия файла завершаются с ошибкой ERROR_ACCESS_DENIED.

Перед вызовом DeleteFile API убедитесь, что все дескрипторы файла закрыты.

2 голосов
/ 29 апреля 2020

Удаляет файл, и все в порядке.

Очевидно, ваша программа открывает файл в другом месте и не закрывает его. Таким образом, дескриптор остается открытым, пока программа не существует.

Убедитесь, что вы закрыли дескрипторы файлов.

Такое поведение DeleteFile является функцией, а не ошибкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...