var
Form1: TForm1;
TotalFileNumbers:Integer;
SearchFileType:String;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
TotalFileNumbers:=0;
SearchFileType:='*.txt';
end;
function TForm1.CurrentIsValidDir(SearchRec:TSearchRec):integer;
begin
if ((SearchRec.Attr <> 16) and
(SearchRec.Name<>'.') and
(SearchRec.Name<>'..')) then
Result:=0
else if ((SearchRec.Attr = 16) and
(SearchRec.Name<>'.') and
(SearchRec.Name<>'..')) then
Result:=1
else
Result:=2;
end;
Procedure TForm1.RecurSearchFile(CurrentDir:string;SearchFileType:string;SearchResult:TStrings;var Number:integer);
var
i:integer;
Subdir:TStringList;
SearchRec:TsearchRec;
begin
//第一次调用FindFirst和FindNext查找符合要求的文件
if (FindFirst(CurrentDir+SearchFileType, faAnyFile, SearchRec)=0) then
begin
repeat
if CurrentIsValidDir(SearchRec)=0 then
begin
Inc(Number);
Searchresult.Add(CurrentDir+SearchRec.Name);
end;
application.ProcessMessages ;
until (FindNext(SearchRec) <> 0);
end;
FindClose(SearchRec);
//以下是递归部分,查找各子目录。
Subdir:=TStringList.Create;
if (FindFirst(CurrentDir+'*.*', faDirectory, SearchRec)=0) then
begin
repeat
if CurrentIsValidDir(SearchRec)=1 then
begin
Subdir.Add(SearchRec.Name);
end;
application.ProcessMessages ;
until (FindNext(SearchRec) <> 0);
end;
FindClose(SearchRec);
for i:=0 to Subdir.Count-1 do
begin
RecurSearchfile(CurrentDir+Subdir.Strings[i]+'\',SearchFileType,Searchresult,Number);
end;
//资源释放并返回结果。
Subdir.Free;
end;
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
Case ComboBox1.ItemIndex of
0:SearchFileType:='*.txt';
1:SearchFileType:='*.bmp';
2:SearchFileType:='*.mp3';
3:SearchFileType:='*.*';
end;
end;
procedure TForm1.Edit1Change(Sender: TObject);
begin
if Edit1.Text='' then
BitBtn2.Enabled:=False
else
BitBtn2.Enabled:=True;
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
var
SelectDir:string;
begin
if SelectDirectory(SelectDir, [sdAllowCreate, sdPerformCreate, sdPrompt],0) then
begin
if length(SelectDir) > 3 then
SelectDir:=SelectDir+'\';
Edit1.Text:=SelectDir;
end;
end;
function tmyfun.getfilecount(sourcepath:string):integer;
var sr1:TsearchRec;
count:integer;
begin
//加/
count:=0;
sourcepath:=includetrailingbackslash(sourcepath);
if findfirst(sourcepath + '*.*',faAnyFile, sr1)=0 then
begin
repeat
if (sr1.Name<>'.') and (sr1.Name<>'..') then
begin
if sr1.Attr<>faDirectory then
begin
count:=count+1;
end else
begin
//用递归方法再打出子目录下的文件
// getfilecount(sourcepath+sr.Name);
end;
end;
until findnext(sr1)<>0;
end;
result:=count;
findclose(sr1);
end;
上面的高手我这段代码应该怎么改才能让进度条一格一格显示,
我现在的思路是获取一个目录下了文件数目,然后把这个值付给infoFrm.ProgressBar1.Position.max
procedure pSearchFile(mPath: TFileName);
var
vSearchRec: TSearchRec;
K,i: Integer;
begin
K := FindFirst(mPath + '\*.*', faAnyFile, vSearchRec);
i:=i+1;
while K = 0 do
begin
if (vSearchRec.Attr and faDirectory > 0) and
(Pos(vSearchRec.Name, '..') = 0) then
pSearchFile(mPath + '\' + vSearchRec.Name)
else
if Pos(vSearchRec.Name, '..') = 0 then
pAppendFile(mPath + '\' + vSearchRec.Name);
infoFrm.ProgressBar1.Position := i;
K := FindNext(vSearchRec);
end;
FindClose(vSearchRec);
end; { pSearchFile }
procedure TForm1.Button1Click(Sender: TObject);
var
strFileName: string; // holds the name of the file to find
FindFileData: TWin32FindData; // holds file information
SearchHandle: THandle; // holds the search handle
begin
{clear any listed files}
ListView1.Items.Clear;
{if there was no file specified, then specify all files}
if Edit2.GetTextLen = 0 then Edit2.Text:= '*.*';
{construct the filename string}
strFileName:= DirectoryListBox2.Directory + '\' + Edit2.Text;
{set the directory to the specified directory}
SetCurrentDirectory(PChar(DirectoryListBox2.Directory));
{begin the search}
SearchHandle:=FindFirstFile(PChar(strFileName), FindFileData);
{continue searching for all matching files in the current directory}
if (SearchHandle <> INVALID_HANDLE_VALUE) then
repeat
ListView1.Items.Add.Caption:=FindFileData.cFileName;
until (FindNextFile(SearchHandle,FindFileData) = FALSE);
{all files have been found, so close the search handle}
Windows.FindClose(SearchHandle);
end;