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 在进度条中显示进度 要在这个过程中实现 展开
这是枚举文件的函数
假设你来枚举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 在进度条中显示进度 要在这个过程中实现 展开
1个回答
展开全部
如果不包括子文件夹就可以,你增加一个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;
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询