文件是同一類型元素的有序集合,是內存與外設間傳輸數據的渠道。一些外設如顯示器、鍵盤、打印機等都可以看作文件,但最常用的還是磁盤文件,這也是本章我們主要討論的對象。
Delphi繼承了Object Pascal的文件管理功能,並有很大的發展,其中最主要的是提供了用於文件管理的標准控件,同時也提供了更多的文件管理函數。利用Delphi的強大功能,開發一個自己的文件管理系統就成為很容易的事。
本章首先介紹Delphi文件管理的基本概念和標准過程/函數,並提供了一個記錄文件的應用實例,這是從我們實際課題開發中提取出來的。而後介紹Delphi提供的文件控件的使用方法。最後提供的一個綜合例程MDI文件管理器則是對Delphi文件管理功能的綜合應用。
6.1 文件類型和標准過程
Delphi同Object Pascal一樣支持三種文件類型,即:文本文件、記錄文件、無類型文件。
6.1.1文本文件
文本文件類型的變量用如下方法聲明:
var
TextFileVar: Text ;
文本文件是以行為單位進行讀、寫操作的。由於每一行長度不一定相同,不能計算出給定行在文件中的確切位置,因而只能順序地讀寫。而且文本文件只能單獨為讀或寫而打開,在一個打開的文本文件上同時進行讀、寫操作是不允許的。
6.1.1.1 文本文件的打開、關閉
文本文件的打開需要兩個步驟:(1). 文件變量與文件名關聯;(2). 初始化讀寫。
聯文件變量與文件名調用AssignFile標准過程:
AssignFile ( TextFileVar , FileName ) ;
FileName 既可以是全路徑名,也可以僅是文件名。對於後者系統將在當前目錄下查找。
AssignFile是Delphi新提供的一個函數,其功能等價於Object Pascal中的Assign。而Assign在Delphi中更多地被用作一個方法名。
初始化讀寫有三種方式:
1. Reset : 為讀打開文件並把文件指針移動到文件首;
2. Rewrite : 為寫創建一個新文件;
3. Append : 為寫打開存在的文件並把文件指針定位在文件尾。
當使用Reset或Append過程而文件不存在時將會引發一個I/O異常。有關I/O異常的處理請參看本章例程和第十二章中的介紹。
文件的關閉很簡單,只須調用CloseFile過程即可。
雖然Delphi應用程序在退出時會自動關閉所有打開的文件,但自己動手關閉文件可以確保釋放文件句柄,並使程序的可移植性增強。
為保持兼容,Delphi也允許用戶用Assign建立關聯,Close關閉文件。
6.1.1.2 文本文件的讀寫
從文本文件中讀取信息用Read、Readln兩個標准過程。
當讀入數值時,Read、Readln假定數值是用一個或多個空格分開的,而不是逗號、分號或其它字符。對如下一條語句:
Read ( TextFileVar , Num1 , Num2 , Num3 ) ;
如果文件中的數值是:
100 200 300
則能夠成功讀入,而若文件中的數值是
100 200, 300
則Read讀入“200,”並試圖把它轉化成一個數值時會引發一個異常。
當讀入字符是字符串時,Read、Readln過程總是讀取盡可能多的字符填充到字符串變量中或一直讀到行結束符為止。因此從文本文件中讀取格式化的字符串數據,必須聲明與其長度相匹配的字符串變量。如果要從文件中讀取單詞,必須先把文件中的每一行讀入字符串,然後再從字符串中逐個分析出單詞。或者一次只從文本文件中讀入一個字符並測試每個字符後是否是單詞斷開處。
格式化字符串之間的分隔符應讀入到一個臨時變量中,而字符串與數值、數值與數值間的分隔符讀入時會自動識別剔除。對如下一行數據:
Mon 12:10 40 50
定義
var
Day: string[3] ;
Time: string[5] ;
Num1, Num2: Integer ;
則須用如下的read 語句讀入:
read ( TextFileVar , Day , c , Time , Num1 , Num2 ) ;
C為一個臨時字符變量。
6.1.1.3 文本文件的編輯
在Delphi中實現對一個文本文件的編輯,只須讓其與一個Tmemo控件建立關聯即可:
Memo1.Lines.LoadFromFile ( TextFileName ) ;