文件操作
by clin003 at 20070528 from:http://blog.csdn.net/clin003
1.4 Delphi的文件管理标准过程
根据功能我们把标准过程划分为十一类进行介绍。
1.4.1 文件的打开与关闭
AssignFile : 把一个外部文件名和一个文件变量相关联
Reset :打开一个存在的文件
Rewrite :创建并打开一个新文件(或覆盖原有文件)
Append : 以添加方式打开一个文件(只适用于文本文件)
CloseFile : 关闭一个打开的文件
FileOpen :打开一个特定的文件并返回文件句柄
FileCreate :创建一个给定文件名的文件并返回文件句柄
FileClose : 关闭一个特定句柄的文件
后边三个文件主要供系统内部使用,在文件复制的编程中也往往会用到。它们操作的对象是文件句柄而不是文件变量。
1.4.2 文件定位
Seek : 把文件当前位置移到指定部分
FilePos : 返回文件的当前位置
Eoln : 返回行结束标志
EOF : 返回文件结束标志
FileSeek : 改变当前文件指针的位置
Seek与FileSeek的区别是:1. Seek仅用于记录文件;2. FileSeek的参数是文件句柄、偏移量、起始位置。其中起始位置有文件首、当前位置、文件尾三种选择。Seek的参数是文件变量、偏移量,偏移量是从文件首开始定位的。3. FileSeek的偏移量以字节数来计算,而Seek是根据记录号进行移动。
Seek、FilePos仅用于记录文件。但任何文件都可以看作是基于字节的记录文件。下面一段程序表示了它们的用法。
{ 该例子的设计界面为一个包含TOpenDialog部件的窗体。}
uses Dialogs;
var
f: file of Byte;
size: Longint;
S: String;
y: Integer;
begin
if OpenDialog1.Execute then
begin
AssignFile(f, OpenDialog1.FileName);
Reset(f);
size := FileSize(f);
S := 'File size in bytes: ' + IntToStr(size);
y := 10;
// form1.Canvas.TextOut(); 设定在框体的某一区域输出字符信息。
Canvas.TextOut(5, y, S);
y := y + Canvas.TextHeight(S) + 5;
S := 'Seeking halfway into file...';
Canvas.TextOut(5, y, S);
y := y + Canvas.TextHeight(S) + 5;
Seek(f,size div 2); //Seek : 把文件当前位置移到指定部分
S := 'Position is now ' + IntToStr(FilePos(f));
//filepos ;FilePos : 返回文件的当前位置
Canvas.TextOut(5, y, S);
CloseFile(f);
end;
end;
{//下面是要设置窗体区域为我们想要说的话
HRGN hRgn;
BeginPath(Canvas->Handle);
SetBkMode(Canvas->Handle,TRANSPARENT);
Canvas->Font->Name = "楷体_GB2312";
Canvas->Font->Size = 66;
Canvas->TextOut(1,1, "贵州师范大学计算机爱好者协会");
EndPath(Canvas->Handle);
hRgn = PathToRegion(Canvas->Handle);
SetWindowRgn(Handle,hRgn,true);
DeleteObject(hRgn);}
-------------------------------------------------------------
1.4.3 文件删除与截断
Erase : 删除一个存在的文件
DeleteFile : 删除一个文件
Truncate : 从文件当前位置将文件截断
Erase与DeleteFile的区别是:Erase以文件变量为参数,当文件不能删除时引起一个异常;DeleteFile以文件名为参数,当文件不存在或不能删除时返回False,而并不引起一个异常。
1.4.4 文件名操作
Rename :文件更名,以文件变量为操作对象
RenameFile :文件更名,参数为文件的原名和新名
ChangeFileExt :改变文件扩展名
ExpandFileName :返回文件全路径名
ExtractFileExt :返回文件扩展名
ExtractFileName :从全路径名中返回文件名
ExtractFilePath :返回特定文件的路径
1.4.5 文件属性
FileGetAttr :返回文件属性
FileSetAttr :设置文件属性
1.4.6 文件状态
FileSize :返回文件对象大小
IOResult :返回上一次I/O操作的状态
FileExists :检测文件是否存在
1.4.7 文件日期
DateTimeToFileDate :把Delphi日期格式转换为DOS日期格式
FileDateToDateTime :把DOS日期格式转换为Delphi日期格式
FileGetDate :返回文件的DOS日期时间戳
FileSetDate :设置文件的DOS日期时间戳
1.4.8 文件读写
Read,Readln :从文本或记录文件中读取变量
Write :将指定变量写入文本或记录文件
Writeln :将指定变量写入文本文件并写入一个行结束标志
FileRead :从一个指定文件中读取变量
FileWrite :向指定文件写入数据
FileRead和FileWrite都是以文件句柄为操作对象,主要供系统内部使用。
1.4.9 目录操作
MkDir :创建当前目录的子目录
ChDir :改变当前目录
GetDir :返回特定磁盘的当前目录
RmDir :删除一个空子目录
1.4.10 磁盘操作
DiskFree :返回磁盘自由空间
DiskSize :返回特定磁盘的大小
1.4.11 文件查找
FileSearch :查找目录中是否存在某一特定文件
FindFirst :在目录中查找与给定文件名(可以包含匹配符)及属性集相匹配 的第一个文件
FindNext :返回符合条件的下一个文件
FindClose :中止一个FindFirst / FindNext序列
有关文件管理标准过程/函数的更详细资料,请查阅Delphi相关的Help主题。以上的大部分过程在后面都有应用实例,读者可以从中体会其用法。
by clin003 at 20070528 from:http://blog.csdn.net/clin003
在Delphi的联机帮助Help系统中把有关文件的过程/函数分为两个主题:I/O Routine和File_Management Routine。前者大部分以文件变量为操作对象,而后者大部分以文件名或文件句柄为操作对象。这里为了方便读者的使用,我们按功能重新进行了分类。在下一节中主要应用I/O Routine主题下的过程,而在第四节的综合举例中主要应用File_Management Routine主题下的过程。
另外,Windows提供了许多有关文件管理的API函数。虽然在一般情况下,利用Delphi提供的函数已足够解决问题,但有时候仍然需要使用Windows API。在(6.4.4.2)中我们就用到了Windows API函数GetDriveType。有关Windows API函数的情况,请读者参阅相关的资料,这里不再进行介绍。
-------------------------------------------------------------
//显示当前目录代码///
通过创建一个返回字符串的函数GetcurrentDirectory(),来获得当前用户使用的目录。
该函数的名称与Api函数GetCurrentDirectory()的名称相同,但是定义参数及返回值不同。Api函数的具体定义如下:
Dword GetCurrentDirectory(
Dword nBufferLength,//以字符表示的目录缓存的大小
LPTSTR lpBuffer //当前目录的缓存地址
}
实现步骤:
新建一个应用程序。
在应用程序中法制一个编辑框Edit1和一个button1.
打开单元文件unit1,在单元文件中定义返回字符串值的函数GetcurrentDirectory。
为该函数输入合适的代码,并正确使用api函数getcurrentDirectory及getMem()及freeMem()等函数。
返回到编辑框口中,在按钮上面双击鼠标,添加onchick事件,添加代码,将GetcurrentDirectory函数的返回值赋值给编辑框edit1.
保存应用程序到,
测试程序。
程序部分代码:------------------------------------
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,StdCtrls;
function GetCurrentDirectory:String;
var
nBufferLength:DWORD;
lpBuffer :PChar;
begin
nBufferLength:=MAX_PATH+1;
result:='';
GetMem(lpBuffer,nBufferLength);
try
if Windows.GetCurrentDirectory(nBufferLength,lpBuffer)>0 then
Result:=lpBuffer;
finally
freeMem(lpBuffer);
end;
end;
by clin003 at 20070528 from:http://blog.csdn.net/clin003
1.4 Delphi的文件管理标准过程
根据功能我们把标准过程划分为十一类进行介绍。
1.4.1 文件的打开与关闭
AssignFile : 把一个外部文件名和一个文件变量相关联
Reset :打开一个存在的文件
Rewrite :创建并打开一个新文件(或覆盖原有文件)
Append : 以添加方式打开一个文件(只适用于文本文件)
CloseFile : 关闭一个打开的文件
FileOpen :打开一个特定的文件并返回文件句柄
FileCreate :创建一个给定文件名的文件并返回文件句柄
FileClose : 关闭一个特定句柄的文件
后边三个文件主要供系统内部使用,在文件复制的编程中也往往会用到。它们操作的对象是文件句柄而不是文件变量。
1.4.2 文件定位
Seek : 把文件当前位置移到指定部分
FilePos : 返回文件的当前位置
Eoln : 返回行结束标志
EOF : 返回文件结束标志
FileSeek : 改变当前文件指针的位置
Seek与FileSeek的区别是:1. Seek仅用于记录文件;2. FileSeek的参数是文件句柄、偏移量、起始位置。其中起始位置有文件首、当前位置、文件尾三种选择。Seek的参数是文件变量、偏移量,偏移量是从文件首开始定位的。3. FileSeek的偏移量以字节数来计算,而Seek是根据记录号进行移动。
Seek、FilePos仅用于记录文件。但任何文件都可以看作是基于字节的记录文件。下面一段程序表示了它们的用法。
{ 该例子的设计界面为一个包含TOpenDialog部件的窗体。}
uses Dialogs;
var
f: file of Byte;
size: Longint;
S: String;
y: Integer;
begin
if OpenDialog1.Execute then
begin
AssignFile(f, OpenDialog1.FileName);
Reset(f);
size := FileSize(f);
S := 'File size in bytes: ' + IntToStr(size);
y := 10;
// form1.Canvas.TextOut(); 设定在框体的某一区域输出字符信息。
Canvas.TextOut(5, y, S);
y := y + Canvas.TextHeight(S) + 5;
S := 'Seeking halfway into file...';
Canvas.TextOut(5, y, S);
y := y + Canvas.TextHeight(S) + 5;
Seek(f,size div 2); //Seek : 把文件当前位置移到指定部分
S := 'Position is now ' + IntToStr(FilePos(f));
//filepos ;FilePos : 返回文件的当前位置
Canvas.TextOut(5, y, S);
CloseFile(f);
end;
end;
{//下面是要设置窗体区域为我们想要说的话
HRGN hRgn;
BeginPath(Canvas->Handle);
SetBkMode(Canvas->Handle,TRANSPARENT);
Canvas->Font->Name = "楷体_GB2312";
Canvas->Font->Size = 66;
Canvas->TextOut(1,1, "贵州师范大学计算机爱好者协会");
EndPath(Canvas->Handle);
hRgn = PathToRegion(Canvas->Handle);
SetWindowRgn(Handle,hRgn,true);
DeleteObject(hRgn);}
-------------------------------------------------------------
1.4.3 文件删除与截断
Erase : 删除一个存在的文件
DeleteFile : 删除一个文件
Truncate : 从文件当前位置将文件截断
Erase与DeleteFile的区别是:Erase以文件变量为参数,当文件不能删除时引起一个异常;DeleteFile以文件名为参数,当文件不存在或不能删除时返回False,而并不引起一个异常。
1.4.4 文件名操作
Rename :文件更名,以文件变量为操作对象
RenameFile :文件更名,参数为文件的原名和新名
ChangeFileExt :改变文件扩展名
ExpandFileName :返回文件全路径名
ExtractFileExt :返回文件扩展名
ExtractFileName :从全路径名中返回文件名
ExtractFilePath :返回特定文件的路径
1.4.5 文件属性
FileGetAttr :返回文件属性
FileSetAttr :设置文件属性
1.4.6 文件状态
FileSize :返回文件对象大小
IOResult :返回上一次I/O操作的状态
FileExists :检测文件是否存在
1.4.7 文件日期
DateTimeToFileDate :把Delphi日期格式转换为DOS日期格式
FileDateToDateTime :把DOS日期格式转换为Delphi日期格式
FileGetDate :返回文件的DOS日期时间戳
FileSetDate :设置文件的DOS日期时间戳
1.4.8 文件读写
Read,Readln :从文本或记录文件中读取变量
Write :将指定变量写入文本或记录文件
Writeln :将指定变量写入文本文件并写入一个行结束标志
FileRead :从一个指定文件中读取变量
FileWrite :向指定文件写入数据
FileRead和FileWrite都是以文件句柄为操作对象,主要供系统内部使用。
1.4.9 目录操作
MkDir :创建当前目录的子目录
ChDir :改变当前目录
GetDir :返回特定磁盘的当前目录
RmDir :删除一个空子目录
1.4.10 磁盘操作
DiskFree :返回磁盘自由空间
DiskSize :返回特定磁盘的大小
1.4.11 文件查找
FileSearch :查找目录中是否存在某一特定文件
FindFirst :在目录中查找与给定文件名(可以包含匹配符)及属性集相匹配 的第一个文件
FindNext :返回符合条件的下一个文件
FindClose :中止一个FindFirst / FindNext序列
有关文件管理标准过程/函数的更详细资料,请查阅Delphi相关的Help主题。以上的大部分过程在后面都有应用实例,读者可以从中体会其用法。
by clin003 at 20070528 from:http://blog.csdn.net/clin003
在Delphi的联机帮助Help系统中把有关文件的过程/函数分为两个主题:I/O Routine和File_Management Routine。前者大部分以文件变量为操作对象,而后者大部分以文件名或文件句柄为操作对象。这里为了方便读者的使用,我们按功能重新进行了分类。在下一节中主要应用I/O Routine主题下的过程,而在第四节的综合举例中主要应用File_Management Routine主题下的过程。
另外,Windows提供了许多有关文件管理的API函数。虽然在一般情况下,利用Delphi提供的函数已足够解决问题,但有时候仍然需要使用Windows API。在(6.4.4.2)中我们就用到了Windows API函数GetDriveType。有关Windows API函数的情况,请读者参阅相关的资料,这里不再进行介绍。
-------------------------------------------------------------
//显示当前目录代码///
通过创建一个返回字符串的函数GetcurrentDirectory(),来获得当前用户使用的目录。
该函数的名称与Api函数GetCurrentDirectory()的名称相同,但是定义参数及返回值不同。Api函数的具体定义如下:
Dword GetCurrentDirectory(
Dword nBufferLength,//以字符表示的目录缓存的大小
LPTSTR lpBuffer //当前目录的缓存地址
}
实现步骤:
新建一个应用程序。
在应用程序中法制一个编辑框Edit1和一个button1.
打开单元文件unit1,在单元文件中定义返回字符串值的函数GetcurrentDirectory。
为该函数输入合适的代码,并正确使用api函数getcurrentDirectory及getMem()及freeMem()等函数。
返回到编辑框口中,在按钮上面双击鼠标,添加onchick事件,添加代码,将GetcurrentDirectory函数的返回值赋值给编辑框edit1.
保存应用程序到,
测试程序。
程序部分代码:------------------------------------
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,StdCtrls;
function GetCurrentDirectory:String;
var
nBufferLength:DWORD;
lpBuffer :PChar;
begin
nBufferLength:=MAX_PATH+1;
result:='';
GetMem(lpBuffer,nBufferLength);
try
if Windows.GetCurrentDirectory(nBufferLength,lpBuffer)>0 then
Result:=lpBuffer;
finally
freeMem(lpBuffer);
end;
end;