其他语言

位置:IT落伍者 >> 其他语言 >> 浏览文章

DELPHI基础教程:文件管理(一)[3]


发布日期:2018年12月12日
 
DELPHI基础教程:文件管理(一)[3]

记录文件的打开和创建

记录文件的打开和创建同文本文件一样也需要关联和初始化两个步骤同文本文件唯一的不同是不能使用Append过程

记录文件缺省情况下以读写方式打开如果想以只读或只写方式打开则需要修改System单元中定义的变量FileMode的值

FileMode的取值和意义如下表

FileMode的取值和意义

━━━━━━━━━━━━━━

取值 意义

──────────────

只读

只写

读写

━━━━━━━━━━━━━━

FileMode是一个全局变量对它的每次修改都将影响所有Reset的操作因此在打开自己的文件后应还原它的值

在本系统中当用户按下打开按钮时首先弹出一个标准文件打开对话框要求用户输入或选择文件名确认后如果该文件名的文件存在则用Reset打开若不存在则创建程序清单如下

procedure TRecFileFormOpenButtonClick(Sender: TObject)

begin

if OpenDialogExecute then

FileName := OpenDialogFileName

else

exit;

AssignFile(MethodFileFilename)

try

Reset(MethodFile)

FileOpened := True;

except

On EInOutError do

begin

try

if FileExists(FileName) = False then

begin

ReWrite(MethodFile)

FileOpened := True;

end

else

begin

FileOpened := False;

MessageDlg(文件不能打开mtWarning[mbOK]

end;

except

On EInOutError do

begin

FileOpened := False;

MessageDlg(文件不能创建mtWarning[mbOK]

end;

end;

end;

end;

if FileOpened = False then exit;

Count := FileSize(MethodFile)

if Count> then

ChangeGrid;

RecFileFormCaption := FormCaption+ +FileName;

NewButtonEnabled := False;

OpenButtonEnabled := False;

CloseButtonEnabled := True;

end;

首先系统试图用Reset打开一个文件并置FileOpened为True如果文件不能打开则引发一个I/O异常在异常处理过程中首先检测文件是否存在若不存在则创建这个文件否则是其它原因引发的异常则把FileOpend重置为False 并显示信息文件不能打开在文件创建过程中仍可能引发异常因而在一个嵌套的异常处理中把FileOpened重置为False并提示信息文件不能创建

有关异常处理的内容请读者参看第十二章这段程序说明异常处理机制不仅能使我们的程序更健壮而且为编程提供了灵活性

当用户按下创建按钮时系统首先弹出一个标准输入框要求用户输入文件名确认后系统首先检测文件是否存在若存在则直接打开否则创建一个新文件打开或创建过程导致异常则重置FileName和FileOpened两个全局变量

procedure TRecFileFormNewButtonClick(Sender: TObject)

begin

FileName := InputBox(输入框请输入文件名

if FileName = then Exit;

try

AssignFile(MethodFileFileName)

if FileExists(FileName) then

begin

Reset(MethodFile)

Count := FileSize(MethodFile)

if Count> then

ChangeGrid;

end

else

begin

Rewrite(MethodFile)

count := ;

end;

FileOpened := true;

Except

on EInOutError do

begin

FileName := ;

FileOpened := False;

end;

end;

if FileOpened then

begin

NewButtonEnabled := False;

OpenButtonEnabled := False;

CloseButtonEnabled := True;

RecFileFormCaption := FormCaption+ +FileName;

end;

end;

当文件打开或创建后所要做的工作有

● 若文件非空则计算文件长度并用文件内容填充StringGrid

创建打开按钮变灰关闭按钮使能

● 把文件名附到窗口标题后

记录文件的读入和显示

定义一个全局变量Count用来保存文件中的记录个数当文件装入时

Count := FileSize(MethodFile)

如果Count > 则首先确定StringGrid的高度行数为保证StringGrid不会覆盖窗口下面的编辑框定义一个常量MaxShow当Count < MaxShow时记录可全部显示当Count >= MaxShow时StringGrid自动添加一个滚动棒为保证滚动棒不覆盖掉显示内容StringGrid的宽度应留有余地

确定StringGrid高度行数的代码如下

With StringGrid do

if count < MaxShow then

Height := DefaultRowHeight * (Count+)+

else

Height := DefaultRowHeight * MaxShow+;

RowCount := Count+;

end;

而后从文件中逐个读入记录并显示在StringGrid的相应位置

for i := to Count do

begin

Read(MethodFileMethodRec)

ShowMethod(MethodReci)

end;

ShowMehtod是一个过程用来把一条记录填入StringGrid的一行中对于NameCondition域而言只须直接赋值即可而对Nature 域需要把枚举类型值转化为对应意义的字符串(:微观:宏观而对Result域则需要把数值转化为一定格式的字符串

Str (MethodRecResult::ResultStr)

StringGridCells[Pos] := ResultStr;

即Result显示域宽为其中小数点后位数为

[] [] [] []

               

上一篇:DELPHI基础教程:文件管理(一)[4]

下一篇:DELPHI基础教程:文件管理(一)[2]