Удалить доступ к функции каталога запрещен - PullRequest
0 голосов
/ 05 февраля 2020

Я использую приведенный ниже код c ++ для удаления временных файлов из указанного c пути.

C: \ Users \ falcon \ AppData \ Local \ Temp \ ~ GPG.TMP \

Когда внутри папки ~ GPG.TMP существует несколько файлов, сначала она удаляется и, наконец, сама папка удаляется. На этом последнем шаге RemoveDirectory(sPathName), хотя я не получаю никаких исключений, папка фактически не удаляется, но когда я пытаюсь получить к ней доступ (внешне или программно), я получаю сообщение об ошибке № 13 «Отказано в доступе». Почему это происходит?

void CFileOperation::DoDelete(CString sPathName)
{
    CFileFind ff;
    CString sPath = sPathName;

    if (CheckPath(sPath) == PATH_IS_FILE)
    {
        if (!CanDelete(sPath)) 
        {
            m_bAborted = true;
            return;
        }
        if (!DeleteFile(sPath)) throw new CFExeption(GetLastError());
        return;
    }

    PreparePath(sPath);
    sPath += "*.*";

    BOOL bRes = ff.FindFile(sPath);

    while(bRes)
    {
        bRes = ff.FindNextFile();
        if (ff.IsDots()) continue;
        if (ff.IsDirectory())
        {

            sPath = ff.GetFilePath();
            DoDelete(sPath);
        }
        else DoDelete(ff.GetFilePath());
    }
    ff.Close();

    if (!RemoveDirectory(sPathName) && !m_bAborted) {

        throw new CFExeption(GetLastError());


    }

}

1 Ответ

0 голосов
/ 05 февраля 2020

Согласно MSDN: функция RemoveDirectory помечает каталог для удаления при закрытии. Поэтому каталог не удаляется до тех пор, пока не будет закрыт последний дескриптор каталога.

И, imho, Ошибка 13 равна ERROR_INVALID_DATA.

...