本文目录一览:
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