DELPHI 在枚举文件夹下文件所有的文件(包含文件夹里面的文件)如何用进度条显示

DELPHI在枚举文件夹下文件所有的文件(包含文件夹里面的文件)如何用进度条显示这是枚举文件的函数假设你来枚举C盘下的文件这个过程是用时非常长的所以要用进度条显示{这个过... DELPHI 在枚举文件夹下文件所有的文件(包含文件夹里面的文件)如何用进度条显示
这是枚举文件的函数
假设你来枚举C盘下的文件 这个过程是用时非常长的
所以要用进度条显示

{
这个过程得显示进度
}
function MakeFileList(Path, FileExt: string): TStringList;
var
sch: TSearchrec;
begin
Result := TStringList.Create;

if RightStr(Trim(Path), 1) <> '\' then
Path := Trim(Path) + '\'
else
Path := Trim(Path);

if not DirectoryExists(Path) then
begin
Result.Clear;
Exit;
end;

if FindFirst(Path + '*', 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))
or (FileExt = '.*') then
Result.Add(Path + sch.Name);
end;
until FindNext(sch) <> 0;
FindClose(sch);
end;
end;

在枚举一个目录下的所有文件时候 怎么用进度条显示进度?
1 修改上面代码 或者 重新写段代码实现这个功能 (返回值要是 TStringList的)
2 在进度条中显示进度 要在这个过程中实现
展开
 我来答
台浦泽4r
推荐于2016-03-26 · TA获得超过937个赞
知道小有建树答主
回答量:1249
采纳率:62%
帮助的人:640万
展开全部

如果不包括子文件夹就可以,你增加一个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;
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式