2012-04-01 29 views
1

修改我的代碼刪除目錄,但我仍然有同樣的問題,該文件將不會刪除和目錄仍沒有刪除,我需要幫助我需要幫助使用DeleteDirectory和的DeleteFile API函數

#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); 

} 

我不能在這個代碼查找問題,我寫了我什麼都知道,任何人都可以編輯的工作,並感謝大家

+0

你的意思是DeleteFile而不是Delete? shfileoperation API可以在一次調用中完成所有這些操作 – 2012-04-01 12:01:25

+0

但是How?你可以幫我嗎? – Lara 2012-04-01 12:19:58

回答

0

你以後在目錄中刪除一切,它仍然會包含以下條目「」和「..」目錄,這些目錄不能被刪除(除了刪除包含的目錄)。因此,刪除目錄的代碼將永遠不會執行,但即使您已成功刪除所有內容,第二個FindFirstFile仍將始終顯示兩個條目。

+0

但我的問題是,即使該文件夾內的文件不被刪除 – Lara 2012-04-01 12:16:04

+0

@拉拉:你可能有一些文件被標記爲只讀,和/或目錄中包含的其他目錄?你的代碼似乎也沒有預測/處理。 – 2012-04-01 12:19:50

+0

是的,這是真的,因爲首先我正在寫一個簡單的代碼,然後我會處理其餘的。 – Lara 2012-04-01 12:31:46

0

的原因,代碼不工作就是刪除功能總是試圖刪除一個名爲: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

可以使用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 
}