关于查找文件(50分)

  • 主题发起人 主题发起人 fossil
  • 开始时间 开始时间
F

fossil

Unregistered / Unconfirmed
GUEST, unregistred user!
我得查找文件的程序。为什么最后查找文件的数量总返回0啊,明明有×。BMP文件
Function TForm1.GetFileNum(path:string) : integer; //在目录下查找文件;
var
rec:Tsearchrec;
begin
Result := 0;
Findfirst(path+'*.*',faAnyFile,rec);
while FindNext(rec) = 0 do
begin
if ((rec.Attr and faDirectory)=faDirectory) and (rec.name<>'.') and (rec.Name<>'..') then //判断有没有目录存在
GetFileNum(path+rec.name+'/');
if ((rec.Attr and faDirectory)<>faDirectory) and (UpperCase(ExtractFileExt(rec.name))='.BMP') then
begin
inc(Result) ;
end;
application.ProcessMessages;
end;
findclose(rec);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
a: Integer;
begin
a := GetFileNum('d:/' );
ShowMessage(IntToStr(a));
end;
 
跟踪一下
 
跟踪一下
 
改成这样吧,
你那样检查,是不对的
Function TForm1.GetFileNum(path:string) : integer; //在目录下查找文件;
var
rec:Tsearchrec;
begin
Result := 0;
if Findfirst(path+'*.*',faAnyFile,rec)=0 then
begin
if (UpperCase(ExtractFileExt(rec.name))='.BMP') then
Result:=result+1;
while FindNext(rec) = 0 do
begin
if (UpperCase(ExtractFileExt(rec.name))='.BMP') then
begin
inc(Result) ;
end;
application.ProcessMessages;
end;
findclose(rec);
end;
end;
 
我想用递规的方法 一个目录看看还有没有子目录,这样一级一级的查找文件
 
to tingtao我那里不对了
 
>>Findfirst(path+'*.*',faAnyFile,rec);
应该是Findfirst(path+'/*.*',faAnyFile,rec);
 
一般来说,没有
Findfirst(path+'*.*',faAnyFile,rec);
while FindNext(rec) = 0 do
这种用法的,应该是
i:=FindFirst(path+'*.*',faAnyFile,rec);
while i=0 do
begin
XXXXXXX;
i:=FindNext(rec);
end;
 
递规递规
大家怎么都不用递规啊
 
关注啊?我也想知道这个怎么查找文件的问题
 
这里有一个递归的查找,你看看是否合意。其中foundresult保存查到的文件的完整路径。
function SearchFile(mainpath, filename: string;
var foundresult: TStrings): Boolean;
var
i: integer;
Found: Boolean;
subdir1: TStrings;
searchRec: TsearchRec;
begin
if GetStrRight(mainpath, 1) <> '/' then mainpath := mainpath + '/';//自己写的,关键判断是否最后一个字符是“/”,你可以自己改一下。
found := False;
if Trim(filename) <> '' then
begin
subdir1 := TStringList.Create;
if (FindFirst(mainpath + '*.*', faDirectory, SearchRec) = 0) then
begin
if (DirectoryExists(mainpath + SearchRec.Name)) and (SearchRec.Name <> '.')
and (SearchRec.Name <> '..') then subdir1.Add(SearchRec.Name);
while (FindNext(SearchRec) = 0) do
begin
if (DirectoryExists(mainpath + SearchRec.Name)) and (SearchRec.Name <> '.')
and (SearchRec.Name <> '..') then subdir1.Add(SearchRec.Name);
end;
end;
FindClose(SearchRec);
//²éÕÒµ±Ç°Ä¿Â¼¡£
if (FindFirst(mainpath + filename, faAnyFile - faDirectory, SearchRec) = 0) then
begin
foundresult.Add(mainpath + SearchRec.Name);
while (FindNext(SearchRec) = 0) do
begin
foundresult.Add(mainpath + SearchRec.Name);
end;
end;
FindClose(SearchRec);
for i := 0 to subdir1.Count - 1 do
found := Searchfile(mainpath + subdir1.Strings + '/', Filename, foundresult) or found;
subdir1.Free;
end;
Result := found;
end;
 
to:fossil
查找成功能不能讲你的代码贴出来看一看啊
 
我的天啊,怎么怎么多,不是很简单的吗????看不懂,我再看看
 
现在谁告诉我下面这句话的意思就可以得分了
DSearchRec: TSearchRec;
if ((DSearchRec.Attr and faDirectory) = faDirectory) and
(DSearchRec.Name = '.') and (DSearchRec.Name = '..')
then.......
 
k是全局变量
procedure TForm1.Button1Click(Sender: TObject);
var
num: Integer;
path:string;
begin
path := 'D:/pass/bmp/';
k := 0;
num := GetFileNum(path);
showmessage(inttostr(num));
end;

Function TForm1.GetFileNum(path:string) : integer; //在目录下查找文件;
var
rec:Tsearchrec;
begin
Findfirst(path+'*.*',faAnyFile,rec);
while FindNext(rec) = 0 do
begin
if ((rec.Attr and faDirectory)=faDirectory) and (rec.name<>'.') and (rec.Name<>'..') then //判断有没有目录存在
GetFileNum(path+rec.name+'/');
if ((rec.Attr and faDirectory)<>faDirectory) and (UpperCase(ExtractFileExt(rec.name))='.BMP') then
begin
inc(k) ;
end;
application.ProcessMessages;
end;
result := k;
findclose(rec);
end;
 
to duckstar,你写的我还是看不懂,我试出来应该是这样
 

Similar threads

I
回复
0
查看
448
import
I
I
回复
0
查看
521
import
I
I
回复
0
查看
596
import
I
I
回复
0
查看
488
import
I
后退
顶部