如果不包括子文件夹就可以,你增加一个FileListBox控件,把控件的Mask属性设成 path+'*'+fileext
然后就可以统计出该路径下指定后缀名的文件的个数 FileListBox1.Items.Count,这样知道了文件个数,再加一个ProgressBar进度条,把ProgressBar.max:=FileListBox1.Items.Count,循环前
ProgressBar1.Position:=0 ,在循环内增加这个值就行了。
function MakeFileList(Path, FileExt: string):TStringList;
var
sch: TSearchrec;
i,ii:Integer;
begin
Result := TStringList.Create;
if RightStr(Trim(Path), 1) <> '\' then
Path := Trim(Path) + '\'
else Path := Trim(Path);
if LeftStr(FileExt,1)<>'.' then FileExt:='.'+trim(FileExt)
else FileExt:=Trim(FileExt);
if not DirectoryExists(Path) then
begin
Result.Clear;
Exit;
end;
//以下为增加的代码-------
ii:=0;
Form1.FileListBox1.Mask:=Path+'*'+fileext;
i:=Form1.FileListBox1.Items.Count;
Form1.ProgressBar1.Max:=i;
Form1.ProgressBar1.Position:=0;
//--------------------------------
if FindFirst(Path + '*'+fileext, faAnyFile, sch) = 0 then
begin
repeat
Application.ProcessMessages;
if ((sch.Name = '.') or (sch.Name = '..')) then
Continue;
if DirectoryExists(Path + sch.Name) then
begin
Result.AddStrings(MakeFileList(Path + sch.Name, FileExt));
end
else
begin
if (UpperCase(ExtractFileExt(Path + sch.Name)) = UpperCase(FileExt)) then
// or (FileExt = '.*') then
begin
Result.Add(Path + sch.Name);
end;
end;
//增加的代码-------
Inc(ii);
Form1.ProgressBar1.Position:=ii;
Form1.Label1.Caption:=IntToStr(ii);
//----------------------
until FindNext(sch) <> 0;
FindClose(sch);
end;
end;
如果你的版本是2010的话,也可以用下面的方法,
uses IOUtils, Types; //IOUtils为2010新增功能
var
dir: TDirectory;
files: TStringDynArray;//需要 Types 单元支持
str: string;
begin
//aimDir为路径
files := dir.GetFiles(aimDir, '*.jpg', TSearchOption.soAllDirectories);
Memo1.Clear;
for str in files do
Memo1.Lines.Add(str);
end;