Win32 刪除非空目錄
DeleteFile(); //這是刪除文件的win32 API
RemoveFile(); //這是刪除空目錄的win32 API(注意,如果目錄不爲空的話,這個函數將執行失敗)
如果目錄不爲空的話,我知道的有兩種方法刪除:
1.調用命令行
system("rmdir /s /q dirname"); //dirname是要刪除的目錄名稱,這種方式,在使用MFC程序的時候出閃過一個CMD的窗口
/s是級聯刪除 /q 是不提示(在命令行下操作的話,如果不加這個開關,會有提示確認是否刪除目錄,而在程序中不允許停下)
2.使用win32 API
//刪除當前目錄下的tempDir目錄(子目錄也將一併刪除)
-
SHFILEOPSTRUCT FileOp;
-
FileOp.fFlags = FOF_NOCONFIRMATION;
-
FileOp.hNameMappings = NULL;
-
FileOp.hwnd = NULL;
-
FileOp.lpszProgressTitle = NULL;
-
FileOp.pFrom = ".\\tempDir";
-
FileOp.pTo = NULL;
-
FileOp.wFunc = FO_DELETE;
-
SHFileOperation(&FileOp);
此處有一個地方要留心一下,就是FileOp.pFrom這個參數,它使用的字符串一定是要'\0'結尾的,這個地方使用".\\tempDir",這個字符串默認的結束字符就是'\0',所以如果存在這個目錄或者文件的話,一定可以將其刪除,如果像下面這樣寫的話就會出錯:
-
std::string delPath = ".\\tempDir";
-
...
-
FileOp.pFrom = delPath.c_str(); // 此時字符串沒有以'\0'結尾,所以刪除的時候會出錯