紧急求教:如何搜索出一个目录下的所有文件名并把路径和文件名地输进listview控件中。
老板催得紧呀,还望各位大狭指点。 问题点数: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结束后的“文件名”而不是“路径加文件名”?




