Мне нужна помощь, чтобы удалить каталог с помощью функции DeleteDirectory и DeleteFile API - PullRequest
1 голос
/ 01 апреля 2012

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

#include<stdio.h>
#include<Windows.h>
#include<tchar.h>

 void Delete(WIN32_FIND_DATA x);

int main(int argc , char*argv[])
{
    WIN32_FIND_DATA x , d;
    HANDLE f = FindFirstFile(L"d:\\Text\\*.*" , &x);
    if(f == INVALID_HANDLE_VALUE)
    {
        printf("Serach faild\n");
        return 0;
    }

    Delete(x);

    while(FindNextFile(f , &x))
        Delete(x);

    FindClose(f);

    printf("Now I'm going to delete the Directory\n");
    if(RemoveDirectory(L"d:\\Text"))
        printf("Successed\n");
    else
        printf("Did not\n");
}

 void Delete(WIN32_FIND_DATA x)
 {
    if((x.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0)
         {
            _tprintf(L"The first File name is %s\n" , x.cFileName);
            printf("I'm going To delete The File\n");
            if(DeleteFile(L"d:\\Text\\x.cFileName"))
                printf("File Deleted\n");
            else printf("False\n");
         }

    else
            _tprintf(L"The Directory name is %s\n" , x.cFileName);

 }

Я не могу найти проблему в этом коде, я написал все, что знаю, кто-нибудь может отредактировать его, чтобы работать, и спасибо за всех

Ответы [ 3 ]

0 голосов
/ 01 апреля 2012

Причина, по которой код не работает, заключается в том, что функция Delete всегда пытается удалить файл с именем: d:\\Text\\x.cFileName

Вместо этого вам нужно что-то вроде:

        TCHAR buff[MAX_PATH];
        _tprintf(L"The first File name is %s\n" , x.cFileName);
        printf("I'm going To delete The File\n");
        _stprintf(buff, L"d:\\Text\\%s", x.cFileName);
        if(DeleteFile(buff))
            printf("File Deleted\n");
0 голосов
/ 03 апреля 2012

Вы можете использовать функцию SHFileOperation для удаления каталога и всего его содержимого.

WCHAR FilePath[MAX_PATH+1]=L"D:\\Text";
SHFILEOPSTRUCT Operation={0};
Operation.wFunc=FO_DELETE;
//FilePath needs to be double-null terminated
FilePath[wcslen(FilePath)+1]=L'\0';
Operation.pFrom=FilePath;
//Don't show any user interface during the operation
Operation.fFlags=FOF_SILENT|FOF_NOCONFIRMATION|FOF_NOERRORUI;
if(SHFileOperation(&Operation)==0) {
    printf("The directory has been deleted.");
}
else {
    //Handle error here
}
0 голосов
/ 01 апреля 2012

После того, как вы удалите все в каталоге, он все равно будет содержать записи для "."и ".." каталоги, которые нельзя удалить (кроме как путем удаления содержащего каталога).Таким образом, ваш код для удаления каталога никогда не будет выполнен, но ваш второй FindFirstFile всегда будет отображать две записи, даже после того, как вы успешно удалили все.

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