第5章 文件技术编程实例 实例86 获取文件属性
在Windows提供的资源管理器中,选中某个文件,在其上右击,选择“属性”,就会弹出一个“属性”对话框,在其中会显示文件的各种属性。本实例将演示如何获取文件的属性,包括文件的位置、大小、是否只读、是否隐藏、是否为存档文件、是否为系统文件等。
向窗体上添加一个TTabbedNotebook组件、两个TShape组件、4个TCheckBox组件、4个TLabel组件、一个TOpenDialog和一个TBitBtn组件。设计完成的主界面如图5-8所示。
图5-8 主界面
在程序运行过程中需要两个全局变量Attributes、FileName,其中Word类型的Attributes变量用于存储文件的属性,而String类型的FileName属性用于存储文件的路径和文件名。 另外还要在FormCreate()过程中添加下列代码: procedure TfrmMain.FormCreate(Sender: TObject); begin if OpenDialog.Execute then begin FileName:= OpenDialog.FileName; Attributes := FileGetAttr(FileName); ReadOnly.Checked := (Attributes and faReadOnly) = faReadOnly; Archive.Checked := (Attributes and faArchive) = faArchive; System.Checked := (Attributes and faSysFile) = faSysFile; Hidden.Checked := (Attributes and faHidden) = faHidden; lblPosition.Caption:= lblPosition.Caption+ExtractFileDir(FileName); lblName.Caption:=lblName.Caption+ExtractFileName(FileName); lblSize.Caption:=lblSize.Caption+Format('%d bytes', [GetFileSize(FileName)]); end; end; 程序运行初期就会执行FormCreate中的代码,首先通过OpenDialog.Execute语句来显示一个提示读者选择文件的对话框。 如果用户在该对话框中确认选择了一个有效文件后,就把文件路径和文件名等信息存储在变量FileName中,把文件读写属性等信息存储在变量Attributes中。 然后通过判断Attributes分别与faReadOnly、faArchive、faSysFile和faHidden常量比较的结果来决定ReadOnly、Archive、System和Hidden4个CheckBox组件的选中状态。 通过lblPosition.Caption:=lblPosition.Caption+ExtractFileDir(FileName)语句在lblPosition组件中显示文件位置,通过lblName.Caption:=lblName.Caption+ExtractFileName (FileName)语句显示文件名。最后通过GetFileSize函数和lblSize.Caption:=lblSize.Caption+ Format('%d bytes', [GetFileSize(FileName)])语句来显示文件大小,GetFileSize函数代码如下: function TfrmMain.GetFileSize(const FileName: string): LongInt; var SearchRec: TSearchRec; begin try if FindFirst(ExpandFileName(FileName), faAnyFile, SearchRec) = 0 then Result := SearchRec.Size else Result := -1; finally SysUtils.FindClose(SearchRec); end; end; 首先声明SearchRec为一个查找记录,然后通过FindFirst(ExpandFileName(FileName), faAnyFile, SearchRec)语句来查找目标文件,找到后设置GetFileSize函数的返回值为目标文件的大小SearchRec.Size。
程序代码如下: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, ComCtrls, TabNotBk, Buttons; type TfrmMain = class(TForm) OpenDialog: TOpenDialog; TabbedNotebook1: TTabbedNotebook; Shape1: TShape; Shape2: TShape; BtnClose: TBitBtn; Label1: TLabel; ReadOnly: TCheckBox; Hidden: TCheckBox; Archive: TCheckBox; System: TCheckBox; lblPosition: TLabel; lblSize: TLabel; lblName: TLabel; procedure FormCreate(Sender: TObject); function GetFileSize(const FileName: string): LongInt; private { Private declarations } public { Public declarations } end;
var frmMain: TfrmMain; Attributes: Word; FileName:String;
implementation {$R *.dfm}
procedure TfrmMain.FormCreate(Sender: TObject); begin if OpenDialog.Execute then begin FileName:= OpenDialog.FileName; Attributes := FileGetAttr(FileName); ReadOnly.Checked := (Attributes and faReadOnly) = faReadOnly; Archive.Checked := (Attributes and faArchive) = faArchive; System.Checked := (Attributes and faSysFile) = faSysFile; Hidden.Checked := (Attributes and faHidden) = faHidden;
lblName.Caption:=lblName.Caption+ExtractFileName(FileName); lblPosition.Caption:= lblPosition.Caption+ExtractFileDir(FileName); lblSize.Caption:=lblSize.Caption+Format('%d bytes', [GetFileSize(FileName)]);; end; end;
function TfrmMain.GetFileSize(const FileName: string): LongInt; var SearchRec: TSearchRec; begin try if FindFirst(ExpandFileName(FileName), faAnyFile, SearchRec) = 0 then Result := SearchRec.Size else Result := -1; finally SysUtils.FindClose(SearchRec); end; end; end.
保存文件,然后按F9键运行程序,程序运行的初始画面如图5-9所示。
图5-9 程序运行的初始画面 在“打开”对话框中选择了一个有效文件后,单击“打开”按钮,程序就会在主窗体中显示文件的属性信息,如图5-10所示。
图5-10 程序运行结果 |