C++ 遍历文件夹

    

BOOL IsRoot(LPCTSTR lpszPath)
{
	TCHAR szRoot[4];
	wsprintf(szRoot, "%c:\\", lpszPath[0]);
	return (lstrcmp(szRoot, lpszPath) == 0);
}

void FindInAll(::LPCTSTR lpszPath)
{
	TCHAR szFind[MAX_PATH];
	lstrcpy(szFind, lpszPath);
	if (!IsRoot(szFind))
		lstrcat(szFind, "\\");
	lstrcat(szFind, "*.*"); // 找所有文件
	WIN32_FIND_DATA wfd;
	HANDLE hFind = FindFirstFile(szFind, &wfd);
	if (hFind == INVALID_HANDLE_VALUE) // 如果没有找到或查找失败
		return;
	
	do
	{
		if (wfd.cFileName[0] == '.')
			continue; // 过滤这两个目录
		if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
		{
			TCHAR szFile[MAX_PATH];
			if (IsRoot(lpszPath))
				wsprintf(szFile, "%s%s", lpszPath, wfd.cFileName);
			else
				wsprintf(szFile, "%s\\%s", lpszPath, wfd.cFileName);
			FindInAll(szFile); // 如果找到的是目录,则进入此目录进行递归
		}
		else
		{
			TCHAR szFile[MAX_PATH];
			if (IsRoot(lpszPath))
				wsprintf(szFile, "%s%s", lpszPath, wfd.cFileName);
			else
				wsprintf(szFile, "%s\\%s", lpszPath, wfd.cFileName);
			printf("%s\n",szFile);
			// 对文件进行操作
		}
	} while (FindNextFile(hFind, &wfd));
	FindClose(hFind); // 关闭查找句柄

}

  

posted on 2011-09-03 15:56  Eric812048774  阅读(390)  评论(0编辑  收藏  举报

导航