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()) //???
{ }
}
sDir.Format("%c:\\Record\\*.*","D")
bFinded=fdfile.FindFile(sDir);//while (bFinded)
{
bFinded=fdfile.FindNextFile();//
if (fdfile.IsDots())
{
continue;
}
if (fdfile.IsDirectory()) //???
{ }
}
你就这么理解,fdfile就像一个指针会移动的么。下次就不是那个文件了2、
D:\\Record\\下面的文件么
===========================
有什么地方不理解呢?对一个文件夹来说,先找到的是这个文件夹本身,用"."表示,然后找到它的父目录,用".."表示,然后找到的就是这个文件夹下面的子文件夹或是文件了。上面的代码逻辑很清楚啊!2:FindNextFile()在这里是 什么 意思找的是 哪一级目录下的 文件呢 ?
=====================
FindNextFile()和FindFirstFile配合使用,它们查找D:\\Record\\这个目录下的文件和子目录,一至到全部找完,FindNextFile才会返回FALSE。
这个函数并不能完成子目录的下一级查找,也就是说,D:\\Record\\下面的子目录中的文件它们是找不到的,如果想完成这个功能一般是用回调函数,或是用队列来实现。
例子看MSDN
#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:"));
}