转载:http://www.cnblogs.com/chenkunyun/archive/2012/03/24/2415727.html

方法一、

//遍历文件夹函数
void TraverseFolder(LPCTSTR lpPath)
{
TCHAR szFind[MAX_PATH] = {_T("\0")};
WIN32_FIND_DATA findFileData;
BOOL bRet; _tcscpy_s(szFind, MAX_PATH, lpPath);
_tcscat_s(szFind, _T("\\*.*")); //这里一定要指明通配符,不然不会读取所有文件和目录 HANDLE hFind = ::FindFirstFile(szFind, &findFileData);
if (INVALID_HANDLE_VALUE == hFind)
{
return;
} //遍历文件夹
while (TRUE)
{
if (findFileData.cFileName[] != _T('.'))
{//不是当前路径或者父目录的快捷方式
_tprintf(_T("%s\\%s\n"), lpPath, findFileData.cFileName);
if (findFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{//这是一个普通目录
//设置下一个将要扫描的文件夹路径
_tcscpy_s(szFind, MAX_PATH, lpPath);
_tcscat_s(szFind, _T("\\"));
_tcscat_s(szFind, findFileData.cFileName);
///_tcscat_s(szNextDir, _T("\\*"));
//遍历该目录
TraverseFolder(szFind);
}
}
//如果是当前路径或者父目录的快捷方式,或者是普通目录,则寻找下一个目录或者文件
bRet = ::FindNextFile(hFind, &findFileData);
if (!bRet)
{//函数调用失败
//cout << "FindNextFile failed, error code: "
// << GetLastError() << endl;
break;
}
} ::FindClose(hFind);
}

方法二、

void CSRCMBugReportDlg::TraverseFolder(LPCTSTR lpPath)
{
WIN32_FIND_DATA FindFileData;
HANDLE hListFile = NULL;
TCHAR findPath[MAX_PATH] = { };
TCHAR filePath[MAX_PATH] = { };
memset(findPath, , MAX_PATH);
memset(filePath, , MAX_PATH);
lstrcpy(findPath, lpPath);
lstrcpy(filePath, lpPath); int len = lstrlen(findPath);
if (findPath[len - ] != _T('\\'))
{
lstrcat(findPath, _T("\\"));
}
lstrcat(findPath, _T("*.*"));
hListFile = FindFirstFile(findPath, &FindFileData); if (hListFile == INVALID_HANDLE_VALUE)
{
return;
}
else
{
do
{
if (lstrcmp(FindFileData.cFileName, _T(".")) == || lstrcmp(FindFileData.cFileName, _T("..")) == )
{
continue;
}
if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN)
{
continue;
}
if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
int len = lstrlen(filePath);
if (filePath[len - ] != _T('\\'))
{
lstrcat(filePath, _T("\\"));
}
lstrcat(filePath, FindFileData.cFileName); //子目录
TraverseFolder(filePath);
}
else
{
int len = lstrlen(filePath); if (filePath[len - ] != _T('\\'))
{
lstrcat(filePath, _T("\\"));
}
lstrcat(filePath, FindFileData.cFileName);
//文件 }
memset(&FindFileData, , sizeof(WIN32_FIND_DATA));
memset(filePath, , MAX_PATH);
lstrcpy(filePath, lpPath);
} while (FindNextFile(hListFile, &FindFileData));
} ::FindClose(hListFile);
}

最新文章

  1. innerText引发的错误
  2. POJ 2418
  3. 从python中copy与deepcopy的区别看python引用
  4. mongoDB 入门指南、示例
  5. flex 监听网络连接情况
  6. 跳跃表Skip List【附java实现】
  7. (2015年郑州轻工业学院ACM校赛题) B迷宫
  8. Delphi 对泛型TList的的改进(TSimpleList)
  9. 今天开始上Linux运维课。
  10. Hadoop(三)手把手教你搭建Hadoop全分布式集群
  11. WPF自定义Window样式(1)
  12. linux 乌班图 nginx php直接下载下来
  13. Spring Boot集成JPA的Column注解命名字段无效的问题
  14. Nmap扫描命令使用详解
  15. [uboot] (第三章)uboot流程——uboot-spl代码流程
  16. Python Anaconda使用
  17. Java获取后台数据,动态生成多行多列复选框
  18. mariadb设置初始密码
  19. 使用maven编译Java项目
  20. Lintcode: Minimum Subarray 解题报告

热门文章

  1. LED流水灯(二)
  2. mysql 导出过长的数字列时变科学计数法问题解决办法
  3. 夺命雷公狗---Thinkphp----2之快快速搭建TP环境
  4. C动态内存分配
  5. 【py分析】
  6. keep your work after network broken
  7. 代码坏味道特别篇————Long parameter List 过长的参数列表
  8. SQL2005中的事务与锁定(一) - 转载
  9. T-sql语句中GO的作用及语法【转】
  10. iOS OC与swift相互调用