×

delphi查找文件

delphi查找文件(delphi findwindow)

admin admin 发表于2023-03-26 04:22:06 浏览80 评论0

抢沙发发表评论

本文目录一览:

delphi中,如何读取一个目录中的所有文件?在线等……

分类: 电脑/网络 程序设计 其他编程语言

问题描述:

现需读取目录:“c:\history data”文件夹中所有文件(该文件夹中,只包含.txt和.done文件),需对每个文件进行处理。

另,求将文件转换目录的函数(比如将c:\history data的文件转移到d:\history中)

解析:

procedure FileSearch(PathName:string);

var

F : TSearchRec;

Found : Boolean;

begin

ChDir(PathName);

Found := (FindFirst('*.*', faAnyFile, F) = 0);

while Found do

begin

if (F.Name = '.') or (F.Name = '..') then

begin

Found := (FindNext(F) = 0);

Continue;

end;

if (F.Attr and faDirectory)0 then

begin

Application.ProcessMessages;

FileSearch(F.Name);

end;

插入你的代码,F.Name就是文件名,GetCurrentDir可以得到当前目录

Found := (FindNext(F) = 0);

end;

FindClose(F);

ChDir('..\');

end;

转换目录可以用MoveFile,查一下帮助

delphi中如何遍历查找文件夹下的某文件名

procedure EnumFileInQueue(path: PChar; fileExt: string; fileList: TStringList);

var

searchRec: TSearchRec;

found: Integer;

tmpStr: string;

curDir: string;

dirs: TQueue;

pszDir: PChar;

begin

dirs := TQueue.Create; //创建目录队列

dirs.Push(path); //将起始搜索路径入队

pszDir := dirs.Pop;

curDir := StrPas(pszDir); //出队

{开始遍历,直至队列为空(即没有目录需要遍历)}

while (True) do

begin

//加上搜索后缀,得到类似'c:\*.*' 、'c:\windows\*.*'的搜索路径

tmpStr := curDir + '\*.*';

//在当前目录查找第一个文件、子目录

found := FindFirst(tmpStr, faAnyFile, searchRec);

while found = 0 do //找到了一个文件或目录后

begin

//如果找到的是个目录

if (searchRec.Attr and faDirectory) 0 then

begin

{在搜索非根目录(C:\、D:\)下的子目录时会出现'.','..'的"虚拟目录"

大概是表示上层目录和下层目录吧。。。要过滤掉才可以}

if (searchRec.Name '.') and (searchRec.Name '..') then

begin

{由于查找到的子目录只有个目录名,所以要添上上层目录的路径

searchRec.Name = 'Windows';

tmpStr:='c:\Windows';

加个断点就一清二楚了

}

tmpStr := curDir + '\' + searchRec.Name;

{将搜索到的目录入队。让它先晾着。

因为TQueue里面的数据只能是指针,所以要把string转换为PChar

同时使用StrNew函数重新申请一个空间存入数据,否则会使已经进

入队列的指针指向不存在或不正确的数据(tmpStr是局部变量)。}

dirs.Push(StrNew(PChar(tmpStr)));

end;

end

else //如果找到的是个文件

begin

{Result记录着搜索到的文件数。可是我是用CreateThread创建线程

来调用函数的,不知道怎么得到这个返回值。。。我不想用全局变量}

//把找到的文件加到Memo控件

if fileExt = '.*' then

fileList.Add(curDir + '\' + searchRec.Name)

else

begin

if SameText(RightStr(curDir + '\' + searchRec.Name, Length(fileExt)), fileExt) then

fileList.Add(curDir + '\' + searchRec.Name);

end;

end;

//查找下一个文件或目录

found := FindNext(searchRec);

end;

{当前目录找到后,如果队列中没有数据,则表示全部找到了;

否则就是还有子目录未查找,取一个出来继续查找。}

if dirs.Count 0 then

begin

pszDir := dirs.Pop;

curDir := StrPas(pszDir);

StrDispose(pszDir);

end

else

break;

end;

//释放资源

dirs.Free;

FindClose(searchRec);

end;

//调用

procedure TForm1.Button1Click(Sender: TObject);

var

dir: string;

FileNameList: TStringList;

begin

dir := trim(Edit1.Text);

FileNameList := TStringList.Create;

//EnumFileInQueue(PChar(dir), '.*', FileNameList);

EnumFileInQueue(PChar(dir), '.*', FileNameList);

ShowMessage(IntToStr(FileNameList.Count));

FileNameList.Free;

end;

如何用Delphi实现子目录级的文件查询

在应用实践中 我们经常会用到文件查询功能 通过Win 中提供的查找功能 我们可以方便的找出磁盘上任何子目录下的文件 其原因是该查找功能可以遍历指定目录下的所有子目录中的文件 从编程角度讲 它实现了子目录级的文件查询 其实 这项功能并不难实现 关键是能理解并掌握懙莨阍这种程序设计思路 本人用Delphi实现了该项功能(任意子目录级) 由于使用了懙莨阍 程序思路清晰 代码量小 -delphi查找文件

实现方法

. 获取当前目录下的所有下一级子目录

. 存入字符串列表中(Tstrings)

其中 用到了几个API函数

FindFirst 是找出指定目录下第一个文件或目录

FindNext 一般和FindFirst配合使用 用来找出下一个文件或目录

FindClose 用来关闭查询

(以上函数Delphi在线帮助中有详尽解释 在此不赘述)

. 用FileExists函数查找当前目录

. 寻找是否有满足条件的文件存在

. 依次使各个子目录成为当前目录

. 递归调用本函数

. 释放资源

. 返回查询结果  

代码如下

从搜索记录中判断是否是子目录

function IsValidDir(SearchRec:TSearchRec):Boolean; begin if (SearchRec Attr= ) and (SearchRec Name ) and (SearchRec Name ) then Result:=True else Result:=False; end;-delphi查找文件

. 这是查询主体函数

参数介绍

Mainpath 指定的查询目录 Filename 欲查询的文件 Foundresult 返回的含完整路径的匹配文件(可能有多个) 如果有匹配文件 函数返回True 否则 返回False;   function SearchFile(mainpath:string; filename:string; var foundresult:TStrings):Boolean; var i:integer; Found:Boolean; subdir :TStrings; searchRec:TsearchRec; begin found:=false; if Trim(filename) then begin subdir :=TStringList Create;//字符串列表必须动态生成 //找出所有下级子目录 if (FindFirst(mainpath+ * * faDirectory SearchRec)= ) then begin if IsValidDir(SearchRec) then subdir Add(SearchRec Name); while (FindNext(SearchRec) = ) do begin if IsValidDir(SearchRec) then subdir Add(SearchRec Name); end; end; FindClose(SearchRec); //查找当前目录 if FileExists(mainpath+filename) then begin found:=true; foundresult Add(mainpath+filename); end; //这是递归部分 查找各子目录 for i:= to subdir Count do found:=Searchfile(mainpath+subdir Strings[i]+ \ Filename foundresult)or found; //资源释放并返回结果 subdir Free; end; result:=found; end;-delphi查找文件

  lishixinzhi/Article/program/Delphi/201311/8417