怎样遍历一个目录下的所有文件?

flyby 2000-08-31 05:11:00
怎样遍历一个目录下的所有文件?
不要用控件!!!
...全文
553 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuhao1 2000-09-01
  • 打赏
  • 举报
回复
先用
chdir('ml'); //ml 为你想搜索的目录
再调用
procedure FindFile(BaoHan:integer);
//搜索指定目录下文件,BaoHan=1 包含子目录
var Sr : TSearchRec;
Err,i: integer;
ml:string;
Begin
i:=0;
Err:=FindFirst('*.*',$37,Sr);
if sr.Name[1]='.' then Err:=FindNext(Sr) ;
if sr.Name[1]='.' then Err:=FindNext(Sr) ;
While (Err = 0) do begin
Listbox1.add(ExpandFileName(Sr.Name));
If (baohan=1)and((Sr.Attr and faDirectory)<>0) then
begin
ChDir(Sr.Name); FindFile(1); ChDir('..') ;
end;
end;
Err:=FindNext(Sr) ;
end ;
end;
taxi 2000-08-31
  • 打赏
  • 举报
回复
上面一个只获取当前目录下所有文件,如果要获取该目录下的子目录的文件,看下面
procedure SearchFile(path:string);
var
SearchRec:TSearchRec;
found:integer;
begin
found:=FindFirst(path+'*.*',faAanyFile,SearchRec);
while found=0 do
begin
if (SearchRec.Name<>'.') and (SearchRec.name<>'..) and
(SearchRec.Name=faDirectory) then
SearchFile(SearchRec.Name+'\')
else
LisBox1.Add(SearchRec.Name);
found:=FindNext(SearchREc);
end;
FindClose(SearchRec);
end;
taxi 2000-08-31
  • 打赏
  • 举报
回复
procedure searchfile(path:string);//注意,path后面要有'\';
var
SearchRec:TSearchRec;
found:integer;
begin
found:=FindFirst(path+'*.*',faAnyFile,SearchRec);
while found=0 do
begin
if (SearchRec.Name<>'.') and (SearchRec.Name<>'..')
and (SearchRec.Attr<>faDirectory) then
ListBox1.Add(SearchRec.Name);
found:=FindNext(SearchRec);
end;
FindClose(SearchRec);
end;

shylsz 2000-08-31
  • 打赏
  • 举报
回复
delphi里不是有控件嘛!
用filelistbox就可以了
「已注销」 2000-08-31
  • 打赏
  • 举报
回复
使用归递调用法,进行遍历目录,需要用FindFirstFile和FindNextFile进行搜索文件。
C++ Builder源码,delphi可以仿制:
#include <vcl.h>
#include <stdio.h>

char CurrentDirectoryBuffer[256];
char OldDirectoryBuffer[256];
bool GetDirList(TStringList *TDirStr);
DWORD dwSize,dwFiles;
bool GetDirList(TStringList *TDirStr)
{
WIN32_FIND_DATA FindData;
HANDLE FindHandle;
GetCurrentDirectory(255,CurrentDirectoryBuffer);
FindHandle=FindFirstFile("*.*",&FindData);
if(FindHandle==INVALID_HANDLE_VALUE) return false;
do{
if(!(FindData.dwFileAttributes&FILE_ATTRIBUTE_ENCRYPTED)&&
!(FindData.dwFileAttributes&FILE_ATTRIBUTE_TEMPORARY)&&
!(FindData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)&&
!(FindData.dwFileAttributes&FILE_ATTRIBUTE_SPARSE_FILE)&&
!(FindData.dwFileAttributes&FILE_ATTRIBUTE_REPARSE_POINT)&&
!(FindData.dwFileAttributes&FILE_ATTRIBUTE_COMPRESSED)&&
!(FindData.dwFileAttributes&FILE_ATTRIBUTE_OFFLINE)){

// printf("%s\\%s\n",CurrentDirectoryBuffer,FindData.cFileName);
dwFiles++;
dwSize+=FindData.nFileSizeLow;

if(TDirStr){
if(CurrentDirectoryBuffer[lstrlen(CurrentDirectoryBuffer)-1]!='\\')
TDirStr->Add((AnsiString)CurrentDirectoryBuffer+"\\"+(AnsiString)FindData.cFileName);
else
TDirStr->Add((AnsiString)CurrentDirectoryBuffer+(AnsiString)FindData.cFileName);}}}
while(FindNextFile(FindHandle,&FindData));
FindClose(FindHandle);
FindHandle=FindFirstFile("*.*",&FindData);
if(FindHandle==INVALID_HANDLE_VALUE) return false;
do{
if(FindData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY&&
FindData.cFileName[0]!='.'){
if(CurrentDirectoryBuffer[lstrlen(CurrentDirectoryBuffer)-1]!='\\')
lstrcat(CurrentDirectoryBuffer,"\\");
lstrcat(CurrentDirectoryBuffer,FindData.cFileName);
SetCurrentDirectory(CurrentDirectoryBuffer);
GetDirList(TDirStr);
SetCurrentDirectory("..");
GetCurrentDirectory(255,CurrentDirectoryBuffer);}}
while(FindNextFile(FindHandle,&FindData));
FindClose(FindHandle);
return true;
}
void GetDirLists(LPCSTR lpPath,TStringList *TDirStr)
{
MessageBeep(MB_OK);
GetCurrentDirectory(255,OldDirectoryBuffer);
SetCurrentDirectory(lpPath);
GetDirList(TDirStr);
SetCurrentDirectory(OldDirectoryBuffer);
}
void main()
{
TStringList *TDirStr;
int i;
TDirStr=new TStringList;
TDirStr->Clear();
GetDirLists("c:\\",TDirStr);
for(i=0;i<TDirStr->Count;i++)
printf("%s\n",TDirStr->Strings[i].c_str());
printf("Total %ld file(s) %ld Byte(s)\n",dwFiles,dwSize);
delete TDirStr;
}

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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