?? 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 + -