首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

VC打开文件夹,该怎么处理

2013-11-26 
VC打开文件夹我有一个名问DATA的文件夹,里面还有很多子文件夹,每个子文件夹下有图片,我想挨个访问DATA文件

VC打开文件夹
我有一个名问DATA的文件夹,里面还有很多子文件夹,每个子文件夹下有图片,我想挨个访问DATA文件夹下的所有子文件夹下的文件,要如何编程实现。
[解决办法]

void visit(LPCTSTR lpszPath, size_t dep)   
{   
    TCHAR szFind[PATH];   
    lstrcpy(szFind, lpszPath);   
    if (szFind[lstrlen(szFind) - 1] != '\\') lstrcat(szFind, "\");   
       
    WIN32_FIND_DATA wfd;   
    HANDLE hFind = FindFirstFile(lstrcat(szFind, "*.*"), &wfd);   
    if (hFind == INVALID_HANDLE_VALUE) return;   
    do  
    {   
        if (wfd.cFileName[0] == '.') continue;   
        for (size_t i = 0; i < dep; ++i) putchar('\t');   
        if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)   
        {   
            printf("[%s]\n", wfd.cFileName);   
            lstrcpy(szFind, lpszPath);   
            if (szFind[lstrlen(szFind) - 1] != '\\') lstrcat(szFind, "\");   
            visit(lstrcat(szFind, wfd.cFileName), dep + 1);   
        }   
        else printf("%s\n", wfd.cFileName);   
    } while (FindNextFile(hFind, &wfd));   
    FindClose(hFind);   
}
 
[解决办法]

BOOL FindFileInFolder(CString strPathName, CString strFileName)
{
CFileFind finder;
CString strSearch;
BOOL bFind;

strFileName.MakeLower();
if (strPathName.Right(1) == "\")
strSearch.Format("%s*.*", strPathName);
else
strSearch.Format("%s\\*.*", strPathName);
bFind = finder.FindFile(strSearch);

if (!bFind)
{
finder.Close();
return FALSE;
}

while (bFind)
{
bFind = finder.FindNextFile();
strPathName = finder.GetFilePath();// 取得文件全名
if (finder.IsDots())  continue;// 是点,忽略
if (finder.IsSystem())  continue;// 是系统文件,忽略
if (finder.IsDirectory())// 是目录
{
if (FindFileInFolder(strPathName, strFileName))  // 递归调用,进入目录
{
finder.Close();
return TRUE;
}
}
else  // 是文件
{
CString strFileFind = finder.GetFileName();
strFileFind.MakeLower();
if (strFileFind == strFileName)
{
finder.Close();
return TRUE;
}
}
}
finder.Close();
return FALSE;
}

热点排行