使用FindFirstFile,FindNextFile遍历一个文件夹

//遍历文件夹函数
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[0] != _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);
}
posted @ 2012-03-24 18:45  kcy-666  阅读(46180)  评论(2编辑  收藏  举报