关于findfile和 findnextfile

xotaocumt5 2009-10-27 05:31:17
1:我在 看 一段 代码 ,这段代码是用来遍历文件夹 下面 的 文件 的 , D盘 下面有一个Record 文件夹 ,在 这个 Record下面 有 三个 文件夹,名字分别为 2009-10-26,2009-9-26,2009-8-26,在 2009-10-26下面 有一个 视频 录像文件 ,在 2009-9-26下面 有3个 视频 录像文件 ,在 2009-8-26下面 有1个 视频 录像文件 ,下面 是 一段 代码 ,我 看不懂 ,当 我 第一次 执行到 fdfile.IsDots()返回的 是 ".";进入 if后执行continue,从新开始,下一次执行到fdfile.IsDots()返回的 是 "..";继续返回到开始 循环处,再下一次执行fdfile.IsDots()时,返回值是0;为什么会这样我 不理解 ,能不能请高手帮我解释一下??、

2:FindNextFile()在这里是 什么 意思找的是 哪一级目录下的 文件呢 ?
sDir.Format("%c:\\Record\\*.*","D")
bFinded=fdfile.FindFile(sDir);//

while (bFinded)
{
bFinded=fdfile.FindNextFile();//
if (fdfile.IsDots())
{


continue;
}
if (fdfile.IsDirectory()) //???
{

}
}

...全文
245 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
wltg2001 2009-10-27
  • 打赏
  • 举报
回复
如果想完成这个功能一般是用回调函数,或是用队列来实现。
=========
打错了字,是递归函数,或是用队列.用递归的多,不过如果你数据结构比较熟悉,用队列实现也很方便.
delphiwcdj 2009-10-27
  • 打赏
  • 举报
回复

#include <afxwin.h>
#include <iostream>

using namespace std;

void Recurse(LPCTSTR pstr)
{
CFileFind finder;

// build a string with wildcards
CString strWildcard(pstr);
strWildcard += _T("\\*.*");

// start working for files
BOOL bWorking = finder.FindFile(strWildcard);

while (bWorking)
{
bWorking = finder.FindNextFile();

// skip . and .. files; otherwise, we'd
// recur infinitely!

if (finder.IsDots())
continue;

// if it's a directory, recursively search it

if (finder.IsDirectory())
{
CString str = finder.GetFilePath();
cout << (LPCTSTR) str << endl;
Recurse(str);
}
}

finder.Close();
}

int main()
{
if (!AfxWinInit(GetModuleHandle(NULL), NULL, GetCommandLine(), 0))
cout << "panic!" << endl;
else
Recurse(_T("C:"));
}

delphiwcdj 2009-10-27
  • 打赏
  • 举报
回复
要查找D:\\Record\\下面的子目录中的文件,用递归即可。
例子看MSDN
wltg2001 2009-10-27
  • 打赏
  • 举报
回复
当 我 第一次 执行到 fdfile.IsDots()返回的 是 ". ";进入 if后执行continue,从新开始,下一次执行到fdfile.IsDots()返回的 是 ".. ";继续返回到开始 循环处,再下一次执行fdfile.IsDots()时,返回值是0;为什么会这样我 不理解 ,能不能请高手帮我解释一下??、
===========================
有什么地方不理解呢?对一个文件夹来说,先找到的是这个文件夹本身,用"."表示,然后找到它的父目录,用".."表示,然后找到的就是这个文件夹下面的子文件夹或是文件了。上面的代码逻辑很清楚啊!

2:FindNextFile()在这里是 什么 意思找的是 哪一级目录下的 文件呢 ?
=====================
FindNextFile()和FindFirstFile配合使用,它们查找D:\\Record\\这个目录下的文件和子目录,一至到全部找完,FindNextFile才会返回FALSE。
这个函数并不能完成子目录的下一级查找,也就是说,D:\\Record\\下面的子目录中的文件它们是找不到的,如果想完成这个功能一般是用回调函数,或是用队列来实现。
xotaocumt5 2009-10-27
  • 打赏
  • 举报
回复
1:楼上 的 说得不清楚啊 !怎么 移动 呢 fdfile??
MoXiaoRab 2009-10-27
  • 打赏
  • 举报
回复
1、
你就这么理解,fdfile就像一个指针会移动的么。下次就不是那个文件了

2、
D:\\Record\\下面的文件么

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧