void CAboutDlg::OnButton2()
{ szFilename="*.*";
SetCurrentDirectory("D:\\cpp\\");
hItem = m_tree.InsertItem("d:",TVI_ROOT,hItem);
Search_Directory(szFilename,hItem);
}
void CAboutDlg::Search_Directory(CString Filename,HTREEITEM hItem)
{
bWorking = finder.FindFile(Filename);
if(!bWorking) return;
bWorking = finder.FindNextFile();
temp=finder.GetFileName();
if(finder.IsDirectory())//第一个是目录
{
if(!finder.IsDots())
{
hSubItem = m_tree.InsertItem(finder.GetFileName(),hItem);
SetCurrentDirectory(finder.GetFileTitle());
Search_Directory(Filename,hSubItem);
SetCurrentDirectory("..");
}
}
else//不是目录
{
hSubItem = m_tree.InsertItem(finder.GetFileName(),hItem);
}
while(finder.FindNextFile())
{
temp=finder.GetFileName();
if(finder.IsDirectory())
{
if(!finder.IsDots())
{
hSubItem = m_tree.InsertItem(finder.GetFileName(),hItem);
SetCurrentDirectory(finder.GetFileTitle());
Search_Directory(Filename,hSubItem);
SetCurrentDirectory("..");
}
}
else//不是目录
{
hSubItem = m_tree.InsertItem(finder.GetFileName(),hItem);
}
}
}
遍历所有目录
{ szFilename="*.*";
SetCurrentDirectory("D:\\cpp\\");
hItem = m_tree.InsertItem("d:",TVI_ROOT,hItem);
Search_Directory(szFilename,hItem);
}
void CAboutDlg::Search_Directory(CString Filename,HTREEITEM hItem)
{
bWorking = finder.FindFile(Filename);
if(!bWorking) return;
bWorking = finder.FindNextFile();
temp=finder.GetFileName();
if(finder.IsDirectory())//第一个是目录
{
if(!finder.IsDots())
{
hSubItem = m_tree.InsertItem(finder.GetFileName(),hItem);
SetCurrentDirectory(finder.GetFileTitle());
Search_Directory(Filename,hSubItem);
SetCurrentDirectory("..");
}
}
else//不是目录
{
hSubItem = m_tree.InsertItem(finder.GetFileName(),hItem);
}
while(finder.FindNextFile())
{
temp=finder.GetFileName();
if(finder.IsDirectory())
{
if(!finder.IsDots())
{
hSubItem = m_tree.InsertItem(finder.GetFileName(),hItem);
SetCurrentDirectory(finder.GetFileTitle());
Search_Directory(Filename,hSubItem);
SetCurrentDirectory("..");
}
}
else//不是目录
{
hSubItem = m_tree.InsertItem(finder.GetFileName(),hItem);
}
}
}
遍历所有目录
解决方案 »
- 大家来看看这个问题
- 质疑Windows程序设计中的一个细节
- Outlook联系人右键菜单
- 用SetViewportOrgEx() 设置了坐标的原点后 如何设置坐标系的方向???
- 熟悉微软WebBrowser控件制作浏览器的朋友过来瞧瞧:关于新开窗口的问题...
- 用ATL做的控件怎样放在网上
- 高分求教:做一个后台程序,记录操作者的击键纪录。急用!
- 怎么用SQL语句,向数据库更新CLongBinary类型的数据?傻傻地问
- 如何实现定时开机
- 关于键盘钩子钩汉字问题请教,以下代码为何会出现莫名奇妙错误?
- 大家说 我中的是什么病毒??我没有多少可用分了
- 请教:为什么下载的代码打开工作空间什么也没有?在别人的机器上就没有问题?谢谢!
{
// TODO: Add your control notification handler code here
CString szFilename="*.*";
SetCurrentDirectory("D:\\MASM611\\");
HTREEITEM hItem = NULL;
m_tree.InsertItem("d:",TVI_ROOT,hItem);
Search_Directory(szFilename,hItem);
}void CVLanDlg::Search_Directory(CString Filename,HTREEITEM hItem)
{
CString temp;
CFileFind finder;
HTREEITEM hSubItem;
BOOL bWorking = finder.FindFile(Filename);
if(!bWorking) return;
bWorking = finder.FindNextFile();
temp=finder.GetFileName();
if(finder.IsDirectory())//µÚÒ»¸öÊÇĿ¼
{
if(!finder.IsDots())
{
hSubItem = m_tree.InsertItem(finder.GetFileName(),hItem);
SetCurrentDirectory(finder.GetFileTitle());
Search_Directory(Filename,hSubItem);
SetCurrentDirectory("..");
}
}
else//²»ÊÇĿ¼
{
hSubItem = m_tree.InsertItem(finder.GetFileName(),hItem);
}
while(finder.FindNextFile())
{
temp=finder.GetFileName();
if(finder.IsDirectory())
{
if(!finder.IsDots())
{
hSubItem = m_tree.InsertItem(finder.GetFileName(),hItem);
SetCurrentDirectory(finder.GetFileTitle());
Search_Directory(Filename,hSubItem);
SetCurrentDirectory("..");
}
}
else//²»ÊÇĿ¼
{
hSubItem = m_tree.InsertItem(finder.GetFileName(),hItem);
}
}
}
没有改动你的代码 这个代码这我的机子可以找到在MASM611下的所有文件夹啊!为什么你的那里不行呢????
{
BOOL bWorking ;
CFileFind finder ;
CString szPath, szName, temp ;
HTREEITEM hSubItem;
bWorking = finder.FindFile(Filename);
if(!bWorking) return;
bWorking = finder.FindNextFile();
if(finder.IsDirectory())//µÚÒ»¸öÊÇĿ¼
{
temp = finder.GetFileName() ;
if(!finder.IsDots())
{
temp = finder.GetFilePath() ;
hSubItem = m_tree.InsertItem( temp ,hItem);
temp += "\\*.*" ;
Search_Directory(temp,hSubItem);
}
}
else//²»ÊÇĿ¼
{
hSubItem = m_tree.InsertItem(finder.GetFileName(),hItem);
}
while(finder.FindNextFile())
{
temp=finder.GetFileName();
if(finder.IsDirectory())
{
if(!finder.IsDots())
{
temp = finder.GetFilePath() ;
hSubItem = m_tree.InsertItem( temp ,hItem);
temp += "\\*.*" ;
Search_Directory(temp,hSubItem);
}
}
else//²»ÊÇĿ¼
{
hSubItem = m_tree.InsertItem(finder.GetFileName(),hItem);
}
}
}void CAboutDlg::OnButton2()
{
TCHAR szDir[MAX_PATH] ;
GetCurrentDirectory( MAX_PATH, szDir ) ;
HTREEITEM hItem = m_tree.InsertItem( szDir,TVI_ROOT);
_tcscat( szDir, "\\*.*" ) ;
Search_Directory(szDir,hItem);
}
hItem = m_tree.InsertItem("d:",TVI_ROOT,hItem);
改成
m_tree.InsertItem("d:",TVI_ROOT,hItem);
应该就可以了。
{
bWorking = finder.FindFile(Filename);
if(!bWorking) return;
bWorking = finder.FindNextFile();
temp=finder.GetFileName();
这里,你的finder是个全局的变量。应该在Search_Directory里重新申请CFileFinder变量。
谁能回答一下吗?
如:你传进去的第一字符串(c:\1)是目录,把1设置为当前目录,而1如果是一个目录(1下面有1-1,1-2子目录),那么你的程序是设置1-1为子目录,假定1-1为下面有一个文件1-1-1.txt,那么你列举了1-1-1.txt,程序就返回了退出递归。
正确的做法是列举了1-1中所有的文件后,把目录设置为1,去列举1-2中的所有文件,1-2中列举完后,把目录设置为c;\列举目录下的其他文件,最后退出!