可是,如果只遍历其中的某些个文件,那应该怎么做呢。
例如:我只要查找到DOC TXT HTML这三个文件后缀的,那应该怎么办呢。虽然说能够通过比较的方法找得出(即查找所有后再根据后缀来比较),但是这样子的效率与遍历全部的一样了,有什么好方法.
还有个小问题请高手指教一下,比如要在遍历某个文件夹(里面有多个文件夹及文件)下的txt文档,该怎么办呢。查找*.*可以递归遍历指定文件夹下的所有文件及文件夹,但我改成*.txt,就只能查找指定文件夹下的txt了
11 个解决方案
#1
例如:我只要查找到DOC TXT HTML这三个文件后缀的,那应该怎么办呢。虽然说能够通过比较的方法找得出(即查找所有后再根据后缀来比较),但是这样子的效率与遍历全部的一样了,有什么好方法.
=============
你分别对TXT,DOC,HTML遍历一次就行了。
=============
你分别对TXT,DOC,HTML遍历一次就行了。
#2
要查找多种文件可以是"*.txt;*.cpp;*.h;*.inl"过滤器。
以MFC为例:
CFileFind finder;
if (finder.FindFile(_T("*.txt;*.cpp;*.h;*.inl")))
{
while (finder.FindNextFile())
{
if (finder.IsDot())
..
if (finder.IsDirectory())
...
}
必要时可以第归。
以MFC为例:
CFileFind finder;
if (finder.FindFile(_T("*.txt;*.cpp;*.h;*.inl")))
{
while (finder.FindNextFile())
{
if (finder.IsDot())
..
if (finder.IsDirectory())
...
}
必要时可以第归。
#3
sorry!搞错!
#4
只对TXT进行遍历,应该怎么写呢,在递归函数里面查找*.* ,能够遍历指定文件夹是里面的所有文件及子文件夹,改成*.txt,就只能查找指定文件夹下的txt了,子文件夹不进入。
#5
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();
}
{
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();
}
#6
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());
//得到路径 查找路径底下的*.*然后递归慢慢找吧
}
}
希望对你有用
#7
悲剧了 如果根目录下有一个文件的话你自己在if (find.FindNextFile() == 0 )里处理一下
我忘记写了
我忘记写了
#8
把那个该死的return去掉 纯属手误 敲上去了
#9
find.IsDots() 应该continue。
find.IsDirectory() 就要进入此子文件夹进行查找。
这几行看不明白,我改了之后还是没什么作用呢好像,能否贴个完整的代码过来啊。
#10
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
然后逐个文件夹找就可以了。
上边写的有问题。
#11
事实上这个的效率更差,因为每找到一个文件,就会查找一次所有的*.txt。不过只有你最热心了,为了多谢你,把分给你了
#1
例如:我只要查找到DOC TXT HTML这三个文件后缀的,那应该怎么办呢。虽然说能够通过比较的方法找得出(即查找所有后再根据后缀来比较),但是这样子的效率与遍历全部的一样了,有什么好方法.
=============
你分别对TXT,DOC,HTML遍历一次就行了。
=============
你分别对TXT,DOC,HTML遍历一次就行了。
#2
要查找多种文件可以是"*.txt;*.cpp;*.h;*.inl"过滤器。
以MFC为例:
CFileFind finder;
if (finder.FindFile(_T("*.txt;*.cpp;*.h;*.inl")))
{
while (finder.FindNextFile())
{
if (finder.IsDot())
..
if (finder.IsDirectory())
...
}
必要时可以第归。
以MFC为例:
CFileFind finder;
if (finder.FindFile(_T("*.txt;*.cpp;*.h;*.inl")))
{
while (finder.FindNextFile())
{
if (finder.IsDot())
..
if (finder.IsDirectory())
...
}
必要时可以第归。
#3
sorry!搞错!
#4
只对TXT进行遍历,应该怎么写呢,在递归函数里面查找*.* ,能够遍历指定文件夹是里面的所有文件及子文件夹,改成*.txt,就只能查找指定文件夹下的txt了,子文件夹不进入。
#5
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();
}
{
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();
}
#6
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());
//得到路径 查找路径底下的*.*然后递归慢慢找吧
}
}
希望对你有用
#7
悲剧了 如果根目录下有一个文件的话你自己在if (find.FindNextFile() == 0 )里处理一下
我忘记写了
我忘记写了
#8
把那个该死的return去掉 纯属手误 敲上去了
#9
find.IsDots() 应该continue。
find.IsDirectory() 就要进入此子文件夹进行查找。
这几行看不明白,我改了之后还是没什么作用呢好像,能否贴个完整的代码过来啊。
#10
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
然后逐个文件夹找就可以了。
上边写的有问题。
#11
事实上这个的效率更差,因为每找到一个文件,就会查找一次所有的*.txt。不过只有你最热心了,为了多谢你,把分给你了