文件操作实例:
1) 文件路径处理:
Delphi 提供了分析文件名的多个函数,如果你需要从文件名中得到路径名,可用下面的两个函数,这两个函数有一点点微小的差别:
ExtractFilePath(FileName:String)
该函数返回路径名,其结尾字符总是“\”
ExtractFileDir(FileName:String)
该函数同样返回路径名,但不包括结尾的字符“\”,除非返回的路径是根目录。
2) 判断文件是否存在 FileExists :
begin
f:= 'c:"temp"test.txt'
if not FileExists(f) then
begin
//……
End;
end;
3) 判断文件夹是否存在 DirectoryExists:
begin
dir:= 'c:"temp"test.txt'
if not DirectoryExists (dir) then
begin
//……
End;
end;
4) 删除文件 DeleteFile; Windows.DeleteFile:
begin
f:= 'c:"temp"test.txt'
//DeleteFile(f); //返回 Boolean
//或者用系统API:
Windows.DeleteFile(PChar(f)); //返回 Boolean
end;
5) 删除文件夹 RemoveDir; RemoveDirectory :
RemoveDir(dir); //返回 Boolean
//或者用系统 API:
RemoveDirectory(PChar(dir)); //返回 Boolean
6) 获取当前文件夹 GetCurrentDir:
dir := GetCurrentDir;
ShowMessage(dir);
7) 设置当前文件夹 SetCurrentDir; ChDir; SetCurrentDirectory:
if SetCurrentDir(dir) then
ShowMessage(GetCurrentDir);
//或者
ChDir(dir); //无返回值
//也可以使用API:
SetCurrentDirectory(PChar(Dir)); //返回 Boolean
8) 获取指定驱动器的当前路径名 GetDir :
Var
dir: string;
b: Byte;
begin
b := 0;
GetDir(b,dir); //第一个参数: 1、2、3、4...分别对应: A、B、C、D..., 0 是缺省驱动器。
ShowMessage(dir);
end;
9) 文件改名 RenameFile:
if RenameFile(OldName,NewName) then
ShowMessage('改名成功!');
10) 建立文件夹 CreateDir; CreateDirectory; ForceDirectories:
if not DirectoryExists(dir) then
CreateDir(dir); //返回 Boolean
//也可以直接用API:
CreateDirectory(PChar(dir),nil); //返回 Boolean
//如果缺少上层目录将自动补齐:
dir := 'c:"temp"CodeGear"
ForceDirectories(dir); //返回 Boolean
11) 删除空文件夹 RemoveDir; RemoveDirectory :
RemoveDir(dir); //返回 Boolean
//也可以直接用API:
RemoveDirectory(PChar(dir)); //返回 Boolean
12) 建立新文件 FileCreate:
i := FileCreate(FileName);
if i>0 then
ShowMessage('新文件的句柄是: ' + IntToStr(i))
Else
ShowMessage('创建失败!');
13) 获取当前文件的版本号 GetFileVersion:
s := 'C:"WINDOWS"notepad.exe';
i := GetFileVersion(s); //如果没有版本号返回 -1
ShowMessage(IntToStr(i)); //327681 这是当前记事本的版本号
14) 获取磁盘空间 DiskSize; DiskFree:
Var r: Real;
r := DiskSize(3); //获取C:总空间, 单位是字节
r := r/1024/1024/1024;
Str(r:0:2,s); //格式为保留两位小数的字符串
s := 'C盘总空间是: ' + s + ' GB';
r := DiskFree(3); //获取C:可用空间
……
15) 查找一个文件 FileSearch:
s := FileSearch(FileName,Dir);
if s<>'' then
ShowMessage(s) //c:"windows"notepad.exe
16) 搜索文件 FindFirst; FindNext; FindClose:
var
sr: TSearchRec; //定义 TSearchRec 结构变量
Attr: Integer; //文件属性
s: string; //要搜索的内容
List: TStringList; //存放搜索结果
begin
s := 'c:"windows"*.txt';
Attr := faAnyFile; //文件属性值faAnyFile表示是所有文件
List := TStringList.Create; //List建立
if FindFirst(s,Attr,sr)=0 then //开始搜索,并给 sr 赋予信息, 返回0表示找到第一个
begin
repeat //如果有第一个就继续找
List.Add(sr.Name); //用List记下结果
until(FindNext(sr)<>0); //因为sr已经有了搜索信息, FindNext只要这一个参数, 返回0表示找到
end;
FindClose(sr); //需要结束搜索, 搜索是内含句柄的
ShowMessage(List.Text); //显示搜索结果
List.Free; //释放List
//更多注释:
//TSearchRec 结构是内涵文件大小、名称、属性与时间等信息
//TSearchRec 中的属性是一个整数值, 可能的值有:
//faReadOnly 1 只读文件
//faHidden 2 隐藏文件
//faSysFile 4 系统文件
//faVolumeID 8 卷标文件
//faDirectory 16 目录文件
//faArchive 32 归档文件
//faSymLink 64 链接文件
//faAnyFile 63 任意文件
//s 的值也可以使用?通配符,好像只支持7个?, 如果没有条件就是*, 譬如: C:"*
//实际使用中还应该在 repeat 中提些条件, 譬如判断如果是文件夹就递归搜索等等
end;
17) 读取与设置文件属性 FileGetAttr; FileSetAttr:
var
FileName: string;
Attr: Integer; //属性值是一个整数
begin
FileName := 'c:"temp"Test.txt';
Attr := FileGetAttr(FileName);
ShowMessage(IntToStr(Attr)); //32, 存档文件
//设置为隐藏和只读文件:
Attr := FILE_ATTRIBUTE_READONLY or FILE_ATTRIBUTE_HIDDEN;
if FileSetAttr(FileName,Attr)=0 then //返回0表示成功
ShowMessage('设置成功!');
//属性可选值(有些用不着):
//FILE_ATTRIBUTE_READONLY = 1; 只读
//FILE_ATTRIBUTE_HIDDEN = 2; 隐藏
//FILE_ATTRIBUTE_SYSTEM = 4; 系统
//FILE_ATTRIBUTE_DIRECTORY = 16
//FILE_ATTRIBUTE_ARCHIVE = 32; 存档
//FILE_ATTRIBUTE_DEVICE = 64
//FILE_ATTRIBUTE_NORMAL = 128; 一般
//FILE_ATTRIBUTE_TEMPORARY = 256
//FILE_ATTRIBUTE_SPARSE_FILE = 512
//FILE_ATTRIBUTE_REPARSE_POINT = 1204
//FILE_ATTRIBUTE_COMPRESSED = 2048; 压缩
//FILE_ATTRIBUTE_OFFLINE = 4096
//FILE_ATTRIBUTE_NOT_CONTENT_INDEXED = 8192; 不被索引
//FILE_ATTRIBUTE_ENCRYPTED = 16384
end;
18) 获取文件的创建时间 FileAge; FileDateToDateTime :
var
FileName: string;
ti: Integer;
dt: TDateTime;
begin
FileName := 'c:"temp"Test.txt';
ti := FileAge(FileName);
ShowMessage(IntToStr(ti)); //返回: 931951472, 需要转换
dt := FileDateToDateTime(ti); //转换
ShowMessage(DateTimeToStr(dt)); //
end;