Delphi中文件操作
2012-10-28 20:26
295 查看
Delphi中磁盘文件主要分为文本文件、有类型文件和无类型文件,对文件的读写操作,Delphi已经封装了许多函数这里不再讨论,下面主要是研究一下文件搜索所用到的几个函数,也算是对近来文件学习的一个总结。
(1)FindFirst:寻找第一个特定路径中符合文件属性的对象实例,如果查找成功则返回0,否则返回错误代码。声明如下:
function FindFirst(const Path:string;Attr:Integer;var F:TSearchRec):integer;
path为给定的路径,可以包含过滤值.Attr为文件属性,详细取值可以看Delphi帮助,查找结果放在F中,F为TSearchRec类型,可以看Delphi源码SysUtils单元。
(2)FindNext:返回下一个符合条件的文件对象,其查找规则同上一次调用FindFirst。声明如下:
function FindNext(var F:TSearchRec):integer;
(3)FindClose:必须与FindFirst配套使用,释放内存变量。声明如下:
procedure FindClose(var F:TSearchRec);
了解了这几个函数用法,下面用例子加以说明,以加深理解。Delphi中删除目录的函数RmDir只能删除空目录,如果是要删除有文件和子目录的目录,该如何删除呢?
分析:对非空目录,首先查找该目录下所有文件,删除这些文件,然后查找该目录的所有子目录,遍历子目录递归删除子目录下的文件和子目录,最后删除根目录。流程如下.
打开Delphi,选择"File"-"New"-"other",新建一个Console Application,源码如下:
program RemoveFolder;
{$APPTYPE CONSOLE}
uses
SysUtils,
classes;
function BackSlash(FileSpec:string):string; //加斜杠
begin
if(FileSpec[length(FileSpec)]<>'\') then
result:=FileSpec+'\'
else
result:=FileSpec;
end;
function NoBackSlash(FileSpec:string):string;//去斜杠
begin
if(FileSpec[length(FileSpec)]='\') then
result:=copy(FileSpec,1,length(FileSpec)-1)
else
result:=FileSpec;
end;
procedure GetFileList(FileSpec:string;var FileList:TStringlist); //获取文件
var
sr:TSearchRec;
FindResult:integer;
begin
FindResult:=FindFirst(FileSpec+'*.*',faAnyFile-faDirectory,sr);
while FindResult=0 do
begin
FileList.Add(ExtractFilePath(FileSpec)+sr.Name);
FindResult:=FindNext(sr);
end;
FindClose(sr);
end;
procedure GetSubDir(Pdir:string;SubDir:TStringlist); //获取子目录
var
sr:TSearchRec;
FindResult:integer;
begin
Findresult:=FindFirst(Pdir+'*.*',faDirectory,sr);
while FindResult=0 do
begin
if pos('.',sr.Name)<>1 then //排除.和..2个虚拟目录
begin
if sr.Attr=faDirectory then
begin
SubDir.Add(Pdir+sr.Name);
end;
end;
FindResult:=FindNext(sr);
end;
FindClose(sr);
end;
function RemoveDir(path:string):Boolean; //删除目录
var
filelst,subdir:Tstringlist;
i:integer;
begin
result:=false;
if not DirectoryExists(NoBackSlash(path)) then
begin
writeln(Format('%s目录不存在',[path]));
exit;
end
else
begin
filelst:=TStringlist.Create;
GetFilelist(BackSlash(path),filelst);
for i:=filelst.Count-1 downto 0 do
begin
if not DeleteFile(filelst.Strings[i]) then
writeln(Format('%s文件无法删除',[filelst[i]]))
else
writeln(Format('正在删除%s文件',[filelst[i]]));
end;
filelst.Free;
subdir:=TStringlist.Create;
GetSubDir(BackSlash(path),subdir);
for i :=subdir.Count-1 downto 0 do
begin
RemoveDir(subdir[i]);
end;
RmDir(path);
writeln(Format('正在删除%s目录',[path]));
result:=True;
end;
end;
var
strdir:string;
begin
writeln('请输入要删除的目录');
readln(strdir);
RemoveDir(strdir);
readln;
end.
先在F:建立如下目录结构
程序运行后效果如图:
(1)FindFirst:寻找第一个特定路径中符合文件属性的对象实例,如果查找成功则返回0,否则返回错误代码。声明如下:
function FindFirst(const Path:string;Attr:Integer;var F:TSearchRec):integer;
path为给定的路径,可以包含过滤值.Attr为文件属性,详细取值可以看Delphi帮助,查找结果放在F中,F为TSearchRec类型,可以看Delphi源码SysUtils单元。
(2)FindNext:返回下一个符合条件的文件对象,其查找规则同上一次调用FindFirst。声明如下:
function FindNext(var F:TSearchRec):integer;
(3)FindClose:必须与FindFirst配套使用,释放内存变量。声明如下:
procedure FindClose(var F:TSearchRec);
了解了这几个函数用法,下面用例子加以说明,以加深理解。Delphi中删除目录的函数RmDir只能删除空目录,如果是要删除有文件和子目录的目录,该如何删除呢?
分析:对非空目录,首先查找该目录下所有文件,删除这些文件,然后查找该目录的所有子目录,遍历子目录递归删除子目录下的文件和子目录,最后删除根目录。流程如下.
打开Delphi,选择"File"-"New"-"other",新建一个Console Application,源码如下:
program RemoveFolder;
{$APPTYPE CONSOLE}
uses
SysUtils,
classes;
function BackSlash(FileSpec:string):string; //加斜杠
begin
if(FileSpec[length(FileSpec)]<>'\') then
result:=FileSpec+'\'
else
result:=FileSpec;
end;
function NoBackSlash(FileSpec:string):string;//去斜杠
begin
if(FileSpec[length(FileSpec)]='\') then
result:=copy(FileSpec,1,length(FileSpec)-1)
else
result:=FileSpec;
end;
procedure GetFileList(FileSpec:string;var FileList:TStringlist); //获取文件
var
sr:TSearchRec;
FindResult:integer;
begin
FindResult:=FindFirst(FileSpec+'*.*',faAnyFile-faDirectory,sr);
while FindResult=0 do
begin
FileList.Add(ExtractFilePath(FileSpec)+sr.Name);
FindResult:=FindNext(sr);
end;
FindClose(sr);
end;
procedure GetSubDir(Pdir:string;SubDir:TStringlist); //获取子目录
var
sr:TSearchRec;
FindResult:integer;
begin
Findresult:=FindFirst(Pdir+'*.*',faDirectory,sr);
while FindResult=0 do
begin
if pos('.',sr.Name)<>1 then //排除.和..2个虚拟目录
begin
if sr.Attr=faDirectory then
begin
SubDir.Add(Pdir+sr.Name);
end;
end;
FindResult:=FindNext(sr);
end;
FindClose(sr);
end;
function RemoveDir(path:string):Boolean; //删除目录
var
filelst,subdir:Tstringlist;
i:integer;
begin
result:=false;
if not DirectoryExists(NoBackSlash(path)) then
begin
writeln(Format('%s目录不存在',[path]));
exit;
end
else
begin
filelst:=TStringlist.Create;
GetFilelist(BackSlash(path),filelst);
for i:=filelst.Count-1 downto 0 do
begin
if not DeleteFile(filelst.Strings[i]) then
writeln(Format('%s文件无法删除',[filelst[i]]))
else
writeln(Format('正在删除%s文件',[filelst[i]]));
end;
filelst.Free;
subdir:=TStringlist.Create;
GetSubDir(BackSlash(path),subdir);
for i :=subdir.Count-1 downto 0 do
begin
RemoveDir(subdir[i]);
end;
RmDir(path);
writeln(Format('正在删除%s目录',[path]));
result:=True;
end;
end;
var
strdir:string;
begin
writeln('请输入要删除的目录');
readln(strdir);
RemoveDir(strdir);
readln;
end.
先在F:建立如下目录结构
程序运行后效果如图:
相关文章推荐
- Delphi 流文件操作TStream类
- 文件操作delphi代码
- delphi 对文件的基本打开关并读写操作 Rewrite、Append、Reset
- Delphi关于记录文件的操作
- Delphi文件操作函数
- delphi关于文件操作集锦
- Delphi的文件操作(定义,关联,打开,读写,关闭)
- delphi操作ini文件
- Delphi 文件、目录等常用操作函数 - delphi - gliethttp
- Delphi文件操作函数
- 整理一些Delphi关于操作文件的函数
- Delphi下操作PDF文件的控件
- Delphi中使用XML绑定来操作XML文件
- DELPHI操作INI文件详细讲解
- Delphi 中对 ini 文件操作
- delphi 操作文件
- Delphi 文件操作
- delphi 对INI文件操作
- Delphi 的文件操作和路径操作
- Delphi中的文件操作