hur.cn - 华软网

 热门搜索

VC 同时多个指定类型,然后遍历文件夹

  作者:未知    来源:网络    更新时间:2010/12/6
    RT。递归遍历指定资料夹的所有资料我会。
    可是,如果只遍历其中的某些个资料,那应该怎么做呢。
    例如:我只需查找到DOC TXT HTML这三个资料后缀的,那应该怎么办呢。虽然说能够通过对照的方法找得出(即查找所有后再根据后缀来对照),然则这样子的效率与遍历全数的一样了,有什么好方法.
    另有个小问题请高手指教一下,比如要在遍历某个资料夹(里面有多个资料夹及资料)下的txt文档,该怎么办呢。查找*.*能够递归遍历指定资料夹下的所有资料及资料夹,但我改成*.txt,就只可查找指定资料夹下的txt了
---华软 网友回答---
例如:我只需查找到DOC TXT HTML这三个资料后缀的,那应该怎么办呢。虽然说能够通过对照的方法找得出(即查找所有后再根据后缀来对照),然则这样子的效率与遍历全数的一样了,有什么好方法.
=============
你分别对TXT,DOC,HTML遍历一次就好了。
---华软网友回复---
要查找多种资料能够是"*.txt;*.cpp;*.h;*.inl"过滤器。
以MFC为例:
CFileFind finder;
if (finder.FindFile(_T("*.txt;*.cpp;*.h;*.inl")))
{
while (finder.FindNextFile())
{
if (finder.IsDot())
..
if (finder.IsDirectory())
...
}
需要时能够第归。

---华软网友回复---
sorry!搞错!
---华软网友回复---
引用 1 楼 wltg2001 的回复:
例如:我只需查找到DOC TXT HTML这三个资料后缀的,那应该怎么办呢。虽然说能够通过对照的方法找得出(即查找所有后再根据后缀来对照),然则这样子的效率与遍历全数的一样了,有什么好方法.
=============
你分别对TXT,DOC,HTML遍历一次就好了。


只对TXT举行遍历,应该怎么写呢,在递归函数里面查找*.* ,能够遍历指定资料夹是里面的所有资料及子资料夹,改成*.txt,就只可查找指定资料夹下的txt了,子资料夹不进入。
---华软网友回复---
void found(CString lpPath)
{
CFileFind finder;
CString strWildcard(lpPath);
strWildcard += L"\\*.*";//只有查找*.*的时候才能遍历到子资料夹呀,我改成*.txt,就只可查找到指定目录里面的TXT,不会去查找子资料夹的。这怎么办?哪位高手指点一下如何遍历指定类型的呢?
BOOL bWorking = finder.FindFile(strWildcard);
while (bWorking)
{
bWorking = finder.FindNextFile();
if (finder.IsDots())
continue;
if (finder.IsDirectory())
{
found(finder.GetFilePath());
}
else
{
//我知道这里能够加了个判断:如果是txt(甚至判断是否DOC,HTML等),是就保存到数据中。然则这样子就与遍历*.*没区别了,我想要的是更有效率的方法,不知道有没有这类方法呢??哪位高手指点一下
FileName[i++] = finder.GetFilePath();
}
}
finder.Close();
}
---华软网友回复---
C++">CFileFind find;

if (find.FindFile("D:\\*.*"))
{
//TRACE("%s",find.GetFileName());
if (find.FindNextFile() == 0 )
{
return ;
}

while(find.FindNextFile())
{
if (find.IsDots())
{
find.FindFile("D:\\*.txt"); //用时改成变量
TRACE("%s\n",find.GetFileName());
}
else if (find.IsDirectory())
{
find.GetFilePath();
TRACE("%s\n",find.GetFilePath());
//获得路径 查找路径底下的*.*然后递归慢慢找吧
}

}

希望对你有用
---华软网友回复---
悲剧了 如果根目录下有一个资料的话你自己在if (find.FindNextFile() == 0 )里措置惩罚一下
我忘记写了
---华软网友回复---
把那个该死的return去掉 纯属手误 敲上去了
---华软网友回复---
引用 6 楼 kkmqj 的回复:
if (find.IsDots())
{
  find.FindFile("D:\\*.txt"); //用时改成变量
   TRACE("%s\n",find.GetFileName());
}
else if (find.IsDirectory())
{
   find.GetFilePath();
   TRACE("%s\n",find.GetFilePath());
   //获得路径 查找路径底下的*.*然后递归慢慢找吧
}

find.IsDots() 应该continue。
find.IsDirectory() 就要进入此子资料夹举行查找。
这几行看不明白,我改了之后照旧没什么作用呢好像,能否贴个完整的代码过来啊。



---华软网友回复---
C++">CFileFind find;

if (find.FindFile("D:\\*.*"))
{
while(find.FindNextFile())
{
if (find.IsDirectory())
{
find.GetFilePath();
TRACE("%s\n",find.GetFilePath());
CString strTemp = find.GetFilePath() ;
strTemp += L"\\";
//获得路径
}
 if (!find.IsDots() && !find.IsDirectory())
{
CFileFind findchild;
findchild.FindFile("D:\\*.txt");
while (findchild.FindNextFile())
{
TRACE("%s\n",find.GetFileName());
}
findchild.Close();
}
}
}

find.Close();

 这是修改版本的。
获得D下的所有资料夹和*.txt
然后逐个资料夹找就能够了。
上边写的有问题。
---华软网友回复---
引用 10 楼 kkmqj 的回复:
C/C++ code
CFileFind find;
    
    if (find.FindFile("D:\\*.*"))
    {
            while(find.FindNextFile())
            {
                if (find.IsDirectory())
                {
        ……


事实上这个的效率更差,由于每找到一个资料,就会查找一次所有的*.txt。不过只有你最热情了,为了多谢你,把分给你了      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。