Проблема в том, что вы не единственный, кто получает дескрипторы вашего файла.Другие процессы и службы также могут открыть файл.Таким образом, удаление невозможно, пока они не освободят свои ручки.Вы можете переименовать файл, когда эти дескрипторы открыты.Вы можете скопировать файл, когда эти ручки открыты.Однако не уверены, что вы можете переместить файл в другой контейнер?
Другие процессы и службы esp.включая антивирус, индексацию и т. д.
Вот функция, которую я написал для выполнения «немедленного удаления» в Windows:
bool DeleteFileNow(const wchar_t * filename)
{
// don't do anything if the file doesn't exist!
if (!PathFileExistsW(filename))
return false;
// determine the path in which to store the temp filename
wchar_t path[MAX_PATH];
wcscpy_s(path, filename);
PathRemoveFileSpecW(path);
// generate a guaranteed to be unique temporary filename to house the pending delete
wchar_t tempname[MAX_PATH];
if (!GetTempFileNameW(path, L".xX", 0, tempname))
return false;
// move the real file to the dummy filename
if (!MoveFileExW(filename, tempname, MOVEFILE_REPLACE_EXISTING))
{
// clean up the temp file
DeleteFileW(tempname);
return false;
}
// queue the deletion (the OS will delete it when all handles (ours or other processes) close)
return DeleteFileW(tempname) != FALSE;
}