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

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

记录文件的打开和创建

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

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

FileMode的取值和意义如下表

表 FileMode的取值和意义

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

取值 意义

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

只读

只写

读写

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

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

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

procedure TRecFileForm OpenButtonClick(Sender: TObject)

begin

if OpenDialog Execute then

FileName := OpenDialog FileName

else

exit

AssignFile(MethodFile Filename)

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

RecFileForm Caption := FormCaption+ +FileName

NewButton Enabled := False

OpenButton Enabled := False

CloseButton Enabled := True

end

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

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

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

procedure TRecFileForm NewButtonClick(Sender: TObject)

begin

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

if FileName = then Exit

try

AssignFile(MethodFile FileName)

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

NewButton Enabled := False

OpenButton Enabled := False

CloseButton Enabled := True

RecFileForm Caption := 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(MethodFile MethodRec)

ShowMethod(MethodRec i)

end

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

Str (MethodRec Result: : ResultStr)

StringGrid Cells[ Pos] := ResultStr

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

lishixinzhi/Article/program/Delphi/201311/25242

用record来处理,给个小示例

Header = record //假设是个头文件的数据格式

Count: Integer

end

Play = record //假设是记录的数据格式

Account: String[20]

Name: String[20]

end

File: TFileStream//假设加载了文件

读取头部信息:

var

H:Header

P:Play

I: Integer

begin

File.Seek(0, smFromBeging)//这个参数名我记不清楚,自己查下

File.ReadBuffer(@H, SizeOf(Header))

for I = 0 to H.Count -1 do

File.ReadBuffer(@P, SizeOf(Play)) //这里读取一个记录后,即可针对记录做些处理

end

大致就是这样读取了,写入的方式差不多,用Writebuffer就可以 。你声明相应的头文件格式和记录的格式,按照我这个思路去处理就行


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11597355.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存