CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C++ Builder >  基础类

紧急求教:如何搜索出一个目录下的所有文件名并把路径和文件名地输进listview控件中。

楼主Smith_79(蓝海)2002-08-05 17:25:55 在 C++ Builder / 基础类 提问

老板催得紧呀,还望各位大狭指点。 问题点数:50、回复次数:13Top

1 楼glyc(大灰狼)回复于 2002-08-05 17:41:36 得分 0

你这个功能,看看C++Builder的例子VirtualListview。那是用Shell   API做的,值得学习。Top

2 楼zqone(zqone)回复于 2002-08-05 17:45:46 得分 0

提供几个API  
  FindFirstFile  
  FindNextFile  
  FindCloseTop

3 楼Smith_79(蓝海)回复于 2002-08-06 10:08:51 得分 0

我的意思是还包括该目录下的所有子目录呀!Top

4 楼suigui(衰鬼)回复于 2002-08-06 10:32:44 得分 20

void   __fastcall   TForm1::ButtonClick(TObject   *Sender)  
  {  
          AnsiString   Path=DirEdt->Text;   //选定的目录  
          if(Path.SubString(Path.Length(),1)!="\\")  
                  Path+="\\";  
                   
          TTreeNode   *Node1=TreeView3->Items->Add(NULL,Path);  
          TSearchRec   sr;  
          if(FindFirst(Path+"*.*",   faAnyFile,   sr)   ==   0)  
          {  
                  do  
                  {  
                          if(   (sr.Attr   &   faDirectory)   &&   sr.Name!="."   &&   sr.Name!="..")  
                          {  
                          //         TDateTime   strim   =   FileDateToDateTime(   sr.Time   );  
                          //         AnsiString   str   =   strim.FormatString(   "YY-MM-DD   hh-mm-ss"   );  
                                  TreeView3->Items->AddChild(Node1,sr.Name);  
                          }  
                  }while(FindNext(sr)   ==   0);  
                  FindClose(sr);  
          }  
  }  
  //---------------------------------------------------------------------------  
  void   __fastcall   TForm1::TreeViewChanging(TObject   *Sender,   TTreeNode   *Node,  
              bool   &AllowChange)  
  {  
   
          Screen->Cursor=crHourGlass;  
          Animate1->Active=true;  
          TSearchRec   sr;  
          TTreeNode   *NodeTmp=Node;  
          AnsiString   DirName,DirTmp;  
          DirName=Node->Text;  
          for(int   I=Node->Level   ;I>0   ;I--)  
          {  
                  NodeTmp=NodeTmp->Parent;  
                  DirTmp=NodeTmp->Text;  
                  if(DirTmp.SubString(DirTmp.Length(),1)!="\\")  
                          DirTmp+="\\";  
                  DirName.Insert(DirTmp,0);  
          }  
           
          if(DirName.SubString(DirName.Length(),1)!="\\")  
                  DirName+="\\";  
                   
          for(int   J=0;J<Node->Count;J++)  
          {  
                  if(Node->Item[J]->Count==0);  
                  {  
                          if   (FindFirst(DirName+Node->Item[J]->Text+"\\*.*",   faAnyFile,   sr)   ==   0)  
                          {  
                                  do  
                                  {  
                                          if((sr.Attr   &   faDirectory)   &&   sr.Name!="."   &&   sr.Name!="..")  
                                          {  
                                                  TTreeNode   *ChildNode;  
                                                  //if(   Node->Item[J]->HasChildren   )   break;  
                                                  //add   code   here  
                                                  TreeView3->Items->AddChild(Node->Item[J]   ,sr.Name);  
                                          }  
                                  }while(FindNext(sr)   ==   0);  
                                  FindClose(sr);  
                          }  
                  }  
          }  
          Screen->Cursor=crDefault;  
          Animate1->Active=false;  
           
  }  
  //---------------------------------------------------------------------------  
  Top

5 楼Smith_79(蓝海)回复于 2002-08-06 17:38:37 得分 0

如果是在DirectoryListBox控件中查找(包括子目录)所有文件和其路径,再把它输入到ListView控件中呢?Top

6 楼Turntogo(星光伴月)回复于 2002-08-06 23:36:25 得分 10

写一个递归函数:  
  该函数只查找一个目录下的所有文件和目录。  
  在此函数中,若发现是子目录并且不是“。”和“。。”这两个目录的话,就调用自己,查完本目录就返回。  
  代码可以参考楼上的!  
   
  Top

7 楼whitetiger8(键盘未敲坏,基本功未练成)回复于 2002-08-07 07:07:55 得分 0

树的遍历,用递归都行。一样的。呵呵。一个最基本的算法Top

8 楼Smith_79(蓝海)回复于 2002-08-08 15:28:51 得分 0

我现在的问题是:不是对TreeView控件的遍历,而做一个类似操作系统中的对系统文件的查找功能的程序,我用了DirectoryListBox控件,但不知如何对它进行递归遍历。Top

9 楼hailulu_wang(没啥)回复于 2002-08-08 17:06:35 得分 20

这是个递归调用的函数,实在treeview里显示所有目录,子目录的,参考一下:  
  void   TForm1::DisplayDirectory(AnsiString   sPath,TTreeNode   *Node)  
  {  
      TTreeNode   *CurrentNode;  
      TSearchRec   sr;  
      if   (FindFirst(sPath+"\\*.*",faDirectory,sr)==0)  
          {  
              if(sr.Attr   ==faDirectory)  
                {  
                    if(sr.Name   !="."&&sr.Name   !="..")  
                      {  
                          CurrentNode=TreeView1->Items->AddChild   (Node,sr.Name);  
                          CurrentNode->ImageIndex   =0;  
                          CurrentNode->SelectedIndex   =1;  
                          DisplayDirectory(sPath+"\\"+sr.Name   ,CurrentNode);  
                      }  
                }  
          }  
      while   (FindNext(sr)==0)  
          {  
              if(sr.Attr   ==faDirectory)  
                {  
                    if(sr.Name!="."&&sr.Name!="..")  
                      {  
                          CurrentNode=TreeView1->Items->AddChild   (Node,sr.Name);  
                          CurrentNode->ImageIndex   =0;  
                          CurrentNode->SelectedIndex   =1;  
                          DisplayDirectory(sPath+"\\"+sr.Name   ,CurrentNode);  
                      }  
                }  
          }  
      FindClose(sr);  
  }Top

10 楼shally5(我在一旁静静的看着你)回复于 2002-08-08 18:09:37 得分 0

学习Top

11 楼JTCY23()回复于 2002-08-13 11:52:10 得分 0

tagTop

12 楼CityHost(市长)回复于 2002-10-15 17:26:49 得分 0

保留Top

13 楼quietman(小高同志)回复于 2002-12-06 15:03:12 得分 0

I   see!Top

相关问题

  • 我想通过opendialog控件返回的文件名前面没有路径,只有文件名,有这个返回值吗?
  • 请问用common-fileUpload控件取出的文件名为什么部署到linux系统下面就变成客户端路径+文件名了?
  • ~~~用什么命令可以获得FileListBox控件中的所有文件名或全路径?~~~
  • SaveFileDialog控件如何知道所选文件的路径以及文件名分别是什么?
  • 如何得到路径和文件名!
  • 怎样获取文件名及路径
  • 请问如何复制一个目录或文件夹,还有就是如何只得到FileListBox控件中的文件名不要路径
  • 我想让用户选择保存文件的路径,(不包括文件名)用哪个控件好?一定给分!
  • Application.ExeName 只能得到文件名,怎样得到它的路径+文件名?
  • 如何在OpenDialog结束后的“文件名”而不是“路径加文件名”?

关键词

  • 控件
  • 函数
  • 文件
  • sr
  • currentnode
  • 目录
  • 递归
  • ttreenode
  • fadirectory
  • displaydirectory

得分解答快速导航

  • 帖主:Smith_79
  • suigui
  • Turntogo
  • hailulu_wang

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo