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

转载: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);
}
上一篇:LDAP&it's usage


下一篇:pwnable.kr fb