📄 016.htm
字号:
face="宋体" lang="ZH-CN">以文件变量为参数,当文件不能删除时引起一个异常;</font>DeleteFile<font
face="宋体" lang="ZH-CN">以文件名为参数,当文件不存在或不能删除时返回</font>False<font
face="宋体" lang="ZH-CN">,而并不引起一个异常。 </p>
</font><p>6.1.4.4 <font face="宋体" lang="ZH-CN">文件名操作 </p>
</font><p>Rename <font face="宋体" lang="ZH-CN">:文件更名,以文件变量为操作对象</p>
</font><p>RenameFile <font face="宋体" lang="ZH-CN">:文件更名,参数为文件的原名和新名</p>
</font><p>ChangeFileExt <font face="宋体" lang="ZH-CN">:改变文件扩展名</p>
</font><p>ExpandFileName <font face="宋体" lang="ZH-CN">:返回文件全路径名</p>
</font><p>ExtractFileExt <font face="宋体" lang="ZH-CN">:返回文件扩展名</p>
</font><p>ExtractFileName <font face="宋体" lang="ZH-CN">:从全路径名中返回文件名</p>
</font><p>ExtractFilePath <font face="宋体" lang="ZH-CN">:返回特定文件的路径 </p>
</font><p>6.1.4.5 <font face="宋体" lang="ZH-CN">文件属性 </p>
</font><p>FileGetAttr <font face="宋体" lang="ZH-CN">:返回文件属性</p>
</font><p>FileSetAttr <font face="宋体" lang="ZH-CN">:设置文件属性 </p>
</font><p>6.1.4.6 <font face="宋体" lang="ZH-CN">文件状态 </p>
</font><p>FileSize <font face="宋体" lang="ZH-CN">:返回文件对象大小</p>
</font><p>IOResult <font face="宋体" lang="ZH-CN">:返回上一次</font>I/O<font
face="宋体" lang="ZH-CN">操作的状态</p>
</font><p>FileExists <font face="宋体" lang="ZH-CN">:检测文件是否存在 </p>
</font><p>6.1.4.7 <font face="宋体" lang="ZH-CN">文件日期 </p>
</font><p>DateTimeToFileDate <font face="宋体" lang="ZH-CN">:把</font>Delphi<font
face="宋体" lang="ZH-CN">日期格式转换为</font>DOS<font face="宋体" lang="ZH-CN">日期格式</p>
</font><p>FileDateToDateTime <font face="宋体" lang="ZH-CN">:把</font>DOS<font
face="宋体" lang="ZH-CN">日期格式转换为</font>Delphi<font face="宋体"
lang="ZH-CN">日期格式</p>
</font><p>FileGetDate <font face="宋体" lang="ZH-CN">:返回文件的</font>DOS<font
face="宋体" lang="ZH-CN">日期时间戳</p>
</font><p>FileSetDate <font face="宋体" lang="ZH-CN">:设置文件的</font>DOS<font
face="宋体" lang="ZH-CN">日期时间戳 </p>
</font><p>6.1.4.8 <font face="宋体" lang="ZH-CN">文件读写 </p>
</font><p>Read<font face="宋体" lang="ZH-CN">,</font>Readln <font face="宋体"
lang="ZH-CN">:从文本或记录文件中读取变量</p>
</font><p>Write <font face="宋体" lang="ZH-CN">:将指定变量写入文本或记录文件</p>
</font><p>Writeln <font face="宋体" lang="ZH-CN">:将指定变量写入文本文件并写入一个行结束标志</p>
</font><p>FileRead <font face="宋体" lang="ZH-CN">:从一个指定文件中读取变量</p>
</font><p>FileWrite <font face="宋体" lang="ZH-CN">:向指定文件写入数据 </p>
</font><p>FileRead<font face="宋体" lang="ZH-CN">和</font>FileWrite<font face="宋体"
lang="ZH-CN">都是以文件句柄为操作对象,主要供系统内部使用。 </p>
</font><p>6.1.4.9 <font face="宋体" lang="ZH-CN">目录操作 </p>
</font><p>MkDir <font face="宋体" lang="ZH-CN">:创建当前目录的子目录</p>
</font><p>ChDir <font face="宋体" lang="ZH-CN">:改变当前目录</p>
</font><p>GetDir <font face="宋体" lang="ZH-CN">:返回特定磁盘的当前目录</p>
</font><p>RmDir <font face="宋体" lang="ZH-CN">:删除一个空子目录 </p>
</font><p>6.1.4.10 <font face="宋体" lang="ZH-CN">磁盘操作 </p>
</font><p>DiskFree <font face="宋体" lang="ZH-CN">:返回磁盘自由空间</p>
</font><p>DiskSize <font face="宋体" lang="ZH-CN">:返回特定磁盘的大小 </p>
</font><p>6.1.4.11 <font face="宋体" lang="ZH-CN">文件查找</p>
</font><p>FileSearch <font face="宋体" lang="ZH-CN">:查找目录中是否存在某一特定文件</p>
</font><p>FindFirst <font face="宋体" lang="ZH-CN">:在目录中查找与给定文件名(可以包含匹配符)及属性集相匹配
的第一个文件</p>
</font><p>FindNext <font face="宋体" lang="ZH-CN">:返回符合条件的下一个文件</p>
</font><p>FindClose <font face="宋体" lang="ZH-CN">:中止一个</font>FindFirst /
FindNext<font face="宋体" lang="ZH-CN">序列 </p>
</font><p><font face="宋体" lang="ZH-CN">
有关文件管理标准过程</font>/<font
face="宋体" lang="ZH-CN">函数的更详细资料,请查阅</font>Delphi<font
face="宋体" lang="ZH-CN">相关的</font>Help<font face="宋体" lang="ZH-CN">主题。以上的大部分过程在后面都有应用实例,读者可以从中体会其用法。</p>
</font><p><font face="宋体" lang="ZH-CN"> 在</font>Delphi<font
face="宋体" lang="ZH-CN">的联机帮助</font>Help<font face="宋体" lang="ZH-CN">系统中把有关文件的过程</font>/<font
face="宋体" lang="ZH-CN">函数分为两个主题:</font>I/O Routine<font
face="宋体" lang="ZH-CN">和</font>File_Management Routine<font face="宋体"
lang="ZH-CN">。前者大部分以文件变量为操作对象,而后者大部分以文件名或文件句柄为操作对象。这里为了方便读者的使用,我们按功能重新进行了分类。在下一节中主要应用</font>I/O
Routine<font face="宋体" lang="ZH-CN">主题下的过程,而在第四节的综合举例中主要应用</font>File_Management
Routine<font face="宋体" lang="ZH-CN">主题下的过程。</p>
</font><p><font face="宋体" lang="ZH-CN"> 另外,</font>Windows<font
face="宋体" lang="ZH-CN">提供了许多有关文件管理的</font>API<font
face="宋体" lang="ZH-CN">函数。虽然在一般情况下,利用</font>Delphi<font
face="宋体" lang="ZH-CN">提供的函数已足够解决问题,但有时候仍然需要使用</font>Windows
API<font face="宋体" lang="ZH-CN">。在</font>(6.4.4.2)<font face="宋体" lang="ZH-CN">中我们就用到了</font>Windows
API<font face="宋体" lang="ZH-CN">函数</font>GetDriveType<font face="宋体"
lang="ZH-CN">。有关</font>Windows API<font face="宋体" lang="ZH-CN">函数的情况,请读者参阅相关的资料,这里不再进行介绍。</p>
</font><p align="center">6.2 <font face="宋体" lang="ZH-CN">记录文件的应用 </p>
</font><p>6.2.1 <font face="宋体" lang="ZH-CN">任务介绍 </p>
<p> 在这一节,我们开发一个系统安全性综合评估方法管理系统。系统安全性在复杂项目开发中十分重要,但由于牵涉面广因而很难获得客观、全面的评估值。鉴于此我们提出多角度、多侧面评估而后定量集成的思路,并在此基础上提出了多种安全性综合评估方法。每种方法由不同部门进行评估而后把结果汇总、综合。</p>
<p> 为此我们定义如下的记录类型: </p>
</font><p>type</p>
<p>TNature = (Micro,Macro);</p>
<p>{<font face="宋体" lang="ZH-CN">方法性质,分为微观和宏观两类} </p>
<p> </font>TMethod = Record</p>
<p>Name: string[20]; {<font face="宋体" lang="ZH-CN">方法名}</font></p>
<p>Condition: string[40]; {<font face="宋体" lang="ZH-CN">方法适用条件}</font></p>
<p>Nature: TNature; {<font face="宋体" lang="ZH-CN">方法性质}</font></p>
<p>Result: Real; {<font face="宋体" lang="ZH-CN">方法评估值}</p>
</font><p>end; </p>
<p><font face="宋体" lang="ZH-CN">用来记录不同方法的信息。</p>
<p> 由于不同方法的条件、性质不同,因而对工程开发的不同阶段适用方法集也不同。因此需要根据实际情况对方法集进行管理。我们把每一方法作为一条记录,每一方法集作为一个记录文件。下面讨论系统的实现方法。 </p>
</font><p>6.2.2 <font face="宋体" lang="ZH-CN">设计基本思路 </p>
<p> 本系统要实现的基本功能是文件的打开、创建、关闭、显示,记录的增加、修改、删除以及结果的综合和显示。为此我们使用了两组按钮分别用于文件和记录的操作,</font>
<font face="宋体" lang="ZH-CN">使用一个</font>StringGrid<font face="宋体"
lang="ZH-CN">控件来显示文件内容,使用一个只读编辑框显示结果的综合。</p>
</font><p><font face="宋体" lang="ZH-CN">其中各部件的名称、功能如下表所示: </p>
</font><p><font face="宋体" lang="ZH-CN">表</font>6.1 <font face="宋体" lang="ZH-CN">主窗口部件的设计</p>
<p>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</font></p>
<p><font face="宋体" lang="ZH-CN">部件名称 主要属性 备注</p>
<p>──────────────────────────────────────</font></p>
<p>RecFileForm BorderStyle=bsDialog <font face="宋体" lang="ZH-CN">文件打开后把文件名附到窗口标题后</font></p>
<p>Position=poScreenCenter</p>
<p>StringGrid1 <font face="宋体" lang="ZH-CN">大小行数动态确定</font></p>
<p>HazAttr(<font face="宋体" lang="ZH-CN">编辑框</font>) ReadOnly=True <font
face="宋体" lang="ZH-CN">显示综合结果</font></p>
<p>OpenButton TabOrder=0 <font face="宋体" lang="ZH-CN">打开一个记录文件</font>,<font
face="宋体" lang="ZH-CN">若文件不存在则创建</font></p>
<p>NewButton Caption='<font face="宋体" lang="ZH-CN">打开</font>' <font face="宋体"
lang="ZH-CN">创建一个记录文件</font>,<font face="宋体" lang="ZH-CN">若文件存在则打开</font></p>
<p>CloseButton Caption='<font face="宋体" lang="ZH-CN">关闭</font>' <font
face="宋体" lang="ZH-CN">关闭一个已打开的文件</font></p>
<p>AddButton Caption='<font face="宋体" lang="ZH-CN">增加</font>' <font face="宋体"
lang="ZH-CN">增加一条记录</font></p>
<p>ModifyButton Caption='<font face="宋体" lang="ZH-CN">修改</font>' <font
face="宋体" lang="ZH-CN">修改一条记录</font></p>
<p>DeleteButton Caption='<font face="宋体" lang="ZH-CN">删除</font>' <font
face="宋体" lang="ZH-CN">删除一条记录</font></p>
<p>CalcuButton Caption='<font face="宋体" lang="ZH-CN">计算</font>' <font
face="宋体" lang="ZH-CN">计算最终结果并显示</font></p>
<p>ExitButton Caption='<font face="宋体" lang="ZH-CN">退出</font>' <font face="宋体"
lang="ZH-CN">系统终止。若当前有打开的文件则先关闭</font></p>
<p>OpenDialog1 Filter= <font face="宋体" lang="ZH-CN">选择或输入欲打开的文件</p>
</font><p>'Record File(*.Rec)|.Rec</p>
<p>|Any File(*.*)|*.*'</p>
<p><font face="宋体" lang="ZH-CN">━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ </p>
<p> 另外,</font>StringGrid1<font face="宋体" lang="ZH-CN">、</font>HazAttr<font
face="宋体" lang="ZH-CN">的标题用两个标签框</font>(Label)<font face="宋体"
lang="ZH-CN">来显示。</p>
<p> 另外我们还需要一个编辑对话框。其中四个编辑框</font>Name<font
face="宋体" lang="ZH-CN">、</font>Condition<font face="宋体" lang="ZH-CN">、</font>Nature<font
face="宋体" lang="ZH-CN">、</font> Result<font face="宋体" lang="ZH-CN">分别对应</font>TMethod<font
face="宋体" lang="ZH-CN">记录的四个域。</font></p>
<font face="宋体" lang="ZH-CN"><p>为协调程序运行,我们定义了一组全局变量。各变量的类型、作用如下表。 </p>
<p> 表</font>6.2<font face="宋体" lang="ZH-CN"> 全局变量及其作用</font></p>
<p><font face="宋体" lang="ZH-CN">━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</p>
<p> </font> <font face="宋体" lang="ZH-CN">变量名 类型 作用</font></p>
<p><font face="宋体" lang="ZH-CN">─────────────────────────────────</p>
</font><p>MethodFile MethodFileType <font face="宋体" lang="ZH-CN">与当前打开文件相关联的文件变量</p>
</font><p>FileName string[70] <font face="宋体" lang="ZH-CN">当前打开文件的文件名</p>
</font><p>Count Count <font face="宋体" lang="ZH-CN">当前打开文件的记录总数</p>
</font><p>CurrentRec Integer <font face="宋体" lang="ZH-CN">当前处理记录号</p>
</font><p>FileOpened Boolean <font face="宋体" lang="ZH-CN">当前是否有文件打开</font></p>
<p><font face="宋体" lang="ZH-CN">━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ </p>
<p>记录文件类型</font>MethodFileType<font face="宋体" lang="ZH-CN">的定义为 </p>
<p> </font>type</p>
<p>MethodFileType = file of TMethod; </p>
<p><font face="宋体" lang="ZH-CN">
布尔变量</font>FileOpened<font
face="宋体" lang="ZH-CN">用于控制文件按钮的使能、变灰,记录按钮的反应以及系统结束时是否需要首先关闭文件。 </p>
</font><p>6.2.3 <font face="宋体" lang="ZH-CN">记录文件的打开和创建 </p>
<p> 记录文件的打开和创建同文本文件一样也需要关联和初始化两个步骤。同文本文件唯一的不同是不能使用</font>Append<font
face="宋体" lang="ZH-CN">过程。</p>
<p> 记录文件缺省情况下以读写方式打开,如果想以只读或只写方式打开,则需要修改</font>System<font
face="宋体" lang="ZH-CN">单元中定义的变量</font>FileMode<font face="宋体"
lang="ZH-CN">的值。</p>
<p> </font>FileMode<font face="宋体" lang="ZH-CN">的取值和意义如下表。 </p>
<p> 表</font>6.3 FileMode<font face="宋体" lang="ZH-CN">的取值和意义</p>
<p>━━━━━━━━━━━━━━</p>
<p>取值 意义</p>
<p>──────────────</p>
</font><p>0 <font face="宋体" lang="ZH-CN">只读</p>
</font><p>1 <font face="宋体" lang="ZH-CN">只写</p>
</font><p>2 <font face="宋体" lang="ZH-CN">读写</p>
<p>━━━━━━━━━━━━━━ </p>
<p> </font>FileMode<font face="宋体" lang="ZH-CN">是一个全局变量,对它的每次修改都将影响所有</font>Reset<font
face="宋体" lang="ZH-CN">的操作,因此在打开自己的文件后应还原它的值。</p>
<p> 在本系统中,当用户按下“打开”按钮时,首先弹出一个标准文件打开对话框,要求用户输入或选择文件名。确认后如果该文件名的文件存在,则用</font>Reset<font
face="宋体" lang="ZH-CN">打开,若不存在则创建。程序清单如下。 </p>
</font><p>procedure TRecFileForm.OpenButtonClick(Sender: TObject);</p>
<p>begin</p>
<p>if OpenDialog1.Execute then</p>
<p>FileName := OpenDialog1.FileName</p>
<p>else</p>
<p>exit;</p>
<p>AssignFile(MethodFile,Filename);</p>
<p>try</p>
<p>Reset(MethodFile);</p>
<p>FileOpened := True;</p>
<p>except</p>
<p>On EInOutError do</p>
<p>begin</p>
<p>try</p>
<p>if FileExists(FileName) = False then</p>
<p>begin</p>
<p>ReWrite(MethodFile);</p>
<p>FileOpened := True;</p>
<p>end</p>
<p>else</p>
<p>begin</p>
<p>FileOpened := False;</p>
<p>MessageDlg('<font face="宋体" lang="ZH-CN">文件不能打开</font>',mtWarning,[mbOK],0);</p>
<p>end;</p>
<p>except</p>
<p>On EInOutError do</p>
<p>begin</p>
<p>FileOpened := False;</p>
<p>MessageDlg('<font face="宋体" lang="ZH-CN">文件不能创建</font>',mtWarning,[mbOK],0);</p>
<p>end;</p>
<p>end;</p>
<p>end;</p>
<p>end;</p>
<p>if FileOpened = False then exit;</p>
<p>Count := FileSize(MethodFile);</p>
<p>if Count>0 then</p>
<p>ChangeGrid;</p>
<p>RecFileForm.Caption := FormCaption+' -- '+FileName;</p>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -