轉自:http://blog.csdn.net/selina6874/article/details/6784766ios
寫程序時用到一個刪除目錄的功能,但C庫函數提供的_rmdir() 只能刪除空目錄,在網上搜索了一下也沒獲得滿意的答案,因而就本身寫了個小程序,遞歸地刪除目錄下的內容,最後刪除目錄自己。小程序
主要用到了如下函數:安全
_access(); /*判斷目錄是否存在*/
函數
_chdir(); /*改變當前工做目錄*/測試
_findfirst(); /*在目錄下查找第一個文件或文件夾*/spa
_findnext(); /*在目錄下查找下一個文件或文件夾*/.net
_findclose(); /*結束一個查找操做*/調試
remove(); /*刪除一個文件*/code
_rmdir(); /*刪除一個空目錄*/blog
代碼以下(下面的程序將直接刪除文件或文件夾,而不是移到回收站,雖然已經屢次測試,但爲了安全起見,準備調試下面程序的朋友請作好備份,或將刪除文件和文件夾的函數替換爲輸出文件名):
#include "io.h" #include "direct.h" #include <iostream> using std::cin; using std::cerr; using std::cout; using std::endl; #include <string> using std::string; void empty_directory(/*const char* dirName*/); int main() { string path; cout << "Input name of the directory you want to remove: "; cin >> path; if (_access(path.c_str(), 06) == -1) { cerr << "error: directory does not exist." << endl; exit(-1); } if (path.at(path.length() - 1) != '\\') { path += '\\'; } _chdir(path.c_str()); empty_directory(); _chdir(path.c_str()); _chdir(".."); _rmdir(path.c_str()); return 0; } void empty_directory( /*const char* dirName*/ ) { _finddata_t fileinfo; memset(&fileinfo, 0x0, sizeof(fileinfo)); intptr_t iFind = _findfirst("*", &fileinfo); if (iFind == -1) { cerr << "error: _findfirst failed." << endl; return; } /* process the first item */ if (fileinfo.name[0] != '.') { if ((fileinfo.attrib & _A_SUBDIR) != 0) { /* process directory */ _chdir(fileinfo.name); empty_directory(/*fileinfo.name*/); _chdir(".."); _rmdir(fileinfo.name); } else { /* process file */ remove(fileinfo.name); } } while (_findnext(iFind, &fileinfo) == 0) { if (fileinfo.name[0] != '.') { if ((fileinfo.attrib & _A_SUBDIR) != 0) { /* process directory */ _chdir(fileinfo.name); empty_directory(/*fileinfo.name*/); _chdir(".."); _rmdir(fileinfo.name); } else { /* process file */ remove(fileinfo.name); } } } _findclose(iFind); }