C++ 删除一个文件目录下的所有文件以及目录
2014-12-12 09:29
447 查看
BOOL DoRemoveDirectory(CString chrDirName); BOOL ReleaseDirectory(CString chrDirName) { BOOL bRemove = DoRemoveDirectory(chrDirName); if (bRemove) ::RemoveDirectory(chrDirName); else return FALSE; return TRUE; } //end of CIVMSvrInfo::ReleaseDirectory() BOOL DoRemoveDirectory(CString chrDirName) { CString strDirName = chrDirName; BOOL result; HANDLE Handle; WIN32_FIND_DATA fData; CString strTemp; DWORD errorcode; Handle = FindFirstFile(strDirName + "\\*.*", &fData); if (Handle == INVALID_HANDLE_VALUE) return FALSE; do { errorcode = GetLastError(); if ( fData.cFileName[0] == '.' ) continue; if (fData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY) { if (strDirName[strDirName.GetLength()-1] != '\\'){ TCHAR chA[MAX_PATH]; CString strA = strDirName+'\\'+ fData.cFileName; lstrcpy(chA, strA); DoRemoveDirectory(chA); } else{ TCHAR chB[MAX_PATH]; CString strB = strDirName + fData.cFileName; lstrcpy(chB, strB); DoRemoveDirectory(chB); } strTemp = strDirName + "\\" + fData.cFileName; SetFileAttributes(strTemp, ~FILE_ATTRIBUTE_READONLY); if (!RemoveDirectory(strTemp)) result = FALSE; else result = TRUE; } else { strTemp = strDirName + "\\" + fData.cFileName; BOOL bl = SetFileAttributes(strTemp, ~FILE_ATTRIBUTE_READONLY); if (!DeleteFile(strTemp)) result = FALSE; else result = TRUE; } }while(FindNextFile(Handle,&fData)); errorcode = GetLastError(); if (errorcode == ERROR_NO_MORE_FILES) { ::RemoveDirectory(strDirName); result = TRUE; } if (Handle) FindClose(Handle); return result; } // end of BOOL PreRemoveDirectory(CString DirName)
在上述代码中
FindFirstFile第一个参数需要一个路径,但要写*.*,表示从所有文件中找到的第一个.但写f:或者f:双斜杠都返回无效句柄.
如果f:\\1.txt 则对特定文件进行搜索,返回找到的第一个
找到的文件的文件结构被记录在WIN32_FIND_DATA结构体里
FindNextFile第一个参数是FindFirstFile的返回值,可以接着上次结果继续寻找
但注意!!!!
但一个目录的文件被搜索一遍后,FindNextFile返回的WIN32_FIND_DATA结构体将重复找到最后一个找到的文件,而不会终止.
让循环结束的方法就是找上一次的报错码,然后看有没有ERROR_NO_MORE_FILES信息发生.
hFile的有效与否个人觉得还是取决于第一次的FindFirstFile结果,本程序后半段的运行主要还是errorcode!=ERROR_NO_MORE_FILES在控制.
相关文章推荐
- C++ 删除一个文件目录下的所有文件以及目录
- 递归删除一个非空目录及其下所有文件和目录
- linux删除一个目录下的所有空文件
- 找出一个目录下所有文件七天未修改过的文件并且删除
- php中删除目录以及目录中的所有文件
- C++查找一个目录下所有特定扩展名的文件
- 在linux中怎样用命令完全拷贝一个目录下的所有文件(包括隐藏文件以及文件夹)到另外一个目录下
- Linux下使用Shell脚本删除一个目录下的所有子目录和文件
- linux的一个find命令rm删除某目录下所有子目录 中的某类文件
- C++获取一个目录下的所有文件
- java删除一个目录下面的所有文件
- 批量删除一个目录下所有的文件夹和文件
- 删除目录以及子目录以下所有目录和文件
- 使用rm删除一个目录下的除了ttt以外的所有文件
- 一个使用多线程删除指定目录及子目录下所有指定文件的Java程序(源码)
- 删除一个目录下面的所有可执行文件
- C# 删除某一个目录中所有的txt文件
- 删除一个文件夹下所有文件以及文件夹
- 删除一个目录下所有文件及文件夹 BOOL DeleteDirectory(LPCTSTR pszPath)
- C++查找一个目录下所有特定扩展名的文件