列出指定目录下的所有文件
procedure ListDir(Path:String; List:TListBox);
{
Path : 起始路径字符串
List : 存放文件名的 List box
}
var
SearchRec:TsearchRec;
Result:integer;
S:string; { 用以保存当前目录, GetDir(0,s) }
begin
try {Exception handler }
ChDir(Path);
except on EInOutError do
begin
MessageDlg('改变目录时发生错误',mtWarning,[mbOK],0);
Exit;
end;
end;
if length(path)<> 3 then path:=path+'/'; { 检查是否根目录,如果不是就在字符串尾部加上'/' }
FindFirst(path+'*.*',faAnyFile,SearchRec); { 并在尾部加上 '*.*' 以便搜索所有文件 }
Repeat
if SearchRec.Attr=faDirectory then { 如果是目录,就...}
begin
if (SearchRec.Name<>'.') and (SearchRec.Name<>'..') then { 忽略 '.' 和 '..' }
begin
GetDir(0,s); { 求默认驱动器的当前目录 }
if length(s)<>3 then s:=s+'/'; { 检查是否根目录 }
List.Items.Add(s+SearchRec.Name); { 加入列表 }
ListDir(s+SearchRec.Name,List); { ListDir 查找目录 }
end;
end
else { 如果不是目录 }
begin
GetDir(0,s); { 求默认驱动器的当前目录 }
if length(s)<>3 then List.items.add(s+'/'+SearchRec.Name) { 检查是否根目录 }
else List.items.add(s+SearchRec.Name); { 加入列表 }
end;
Result:=FindNext(SearchRec);
Application.ProcessMessages;
until result<>0; { 已经列出所有文件 }
GetDir(0,s);
if length(s)<>3 then ChDir('..'); { 如果不是根目录,就返回上一 Level }
end;