1,649
社区成员
发帖
与我相关
我的任务
分享
/*================================================================*
【函數】: GetDirInfo()
【功能】: 查找指定目录指定文件类型的相关信息
【参数】: strPath : 目录名
strDef : 文件扩展名
nSubFolderArray : 返回子目录链表
nFilesArray : 返回文件链表
bIncludeSubFolder : 包括子目录
【返回】: 无
*================================================================*/
void CUtility::GetDirInfo(const CString &strPath,const CString &strDef,CStringArray &nSubFolderArray,CStringArray &nFilesArray,BOOL bIncludeSubFolder)
{
CString strPathTemp = strPath;
if(strPathTemp.Right(1) == _T('\\'))
{
strPathTemp = strPathTemp.Left(strPathTemp.GetLength() - 1);
}
WIN32_FIND_DATA FileData;
HANDLE hSearch;
BOOL fFinished = FALSE;
hSearch = FindFirstFile(strPathTemp + "\\*.*", &FileData);
if(hSearch != INVALID_HANDLE_VALUE)
{
while (!fFinished)
{
CString strFileName = FileData.cFileName;
if((FileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) )
{
if(strFileName != "." && strFileName != "..")
{
CString strPathName;
strPathName.Format(_T("%s\\%s"),strPathTemp,strFileName);
nSubFolderArray.Add(strPathName);
if(bIncludeSubFolder)
{
GetDirInfo(strPathName,strDef,nSubFolderArray,nFilesArray,bIncludeSubFolder);
}
}
}
else
{
if(strDef == _T("*.*"))
{
CString strName;
strName.Format(_T("%s\\%s"),strPathTemp,strFileName);
nFilesArray.Add(strName);
}
else
{
CString strDefEx1 = _T("");
int iPos1 = strFileName.ReverseFind(_T('.'));
if(iPos1 > 0)
{
strDefEx1 = strFileName.Right(strFileName.GetLength() - iPos1);
}
CString strDefEx2 = strDef;
int iPos2 = strDef.ReverseFind(_T('.'));
if(iPos2 > 0)
{
strDefEx2 = strDef.Right(strDef.GetLength() - iPos2);
}
if(strDefEx1.CompareNoCase(strDefEx2) == 0)
{
CString strName;
strName.Format(_T("%s\\%s"),strPathTemp,strFileName);
nFilesArray.Add(strName);
}
}
}
if(!FindNextFile(hSearch, &FileData))fFinished = TRUE;
}
}
FindClose(hSearch);
}
【例子】: GetDirInfo(_T("c:\\)",_T("*.txt"),nSubFolderArray,nFilesArray,FALSE);