熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Delphi編程 >> 正文

DELPHI基礎教程:文件管理(一)[1]

2013-11-23 17:51:55  來源: Delphi編程 

  文件是同一類型元素的有序集合是內存與外設間傳輸數據的渠道一些外設如顯示器鍵盤打印機等都可以看作文件但最常用的還是磁盤文件這也是本章我們主要討論的對象

  Delphi繼承了Object Pascal的文件管理功能並有很大的發展其中最主要的是提供了用於文件管理的標准控件同時也提供了更多的文件管理函數利用Delphi的強大功能開發一個自己的文件管理系統就成為很容易的事

  本章首先介紹Delphi文件管理的基本概念和標准過程/函數並提供了一個記錄文件的應用實例這是從我們實際課題開發中提取出來的而後介紹Delphi提供的文件控件的使用方法最後提供的一個綜合例程MDI文件管理器則是對Delphi文件管理功能的綜合應用

   文件類型和標准過程

  Delphi同Object Pascal一樣支持三種文件類型文本文件記錄文件無類型文件

  文本文件

  文本文件類型的變量用如下方法聲明

  var

  TextFileVar: Text ;

  文本文件是以行為單位進行讀寫操作的由於每一行長度不一定相同不能計算出給定行在文件中的確切位置因而只能順序地讀寫而且文本文件只能單獨為讀或寫而打開在一個打開的文本文件上同時進行讀寫操作是不允許的

   文本文件的打開關閉

  文本文件的打開需要兩個步驟 文件變量與文件名關聯 初始化讀寫

  聯文件變量與文件名調用AssignFile標准過程

  AssignFile ( TextFileVar FileName ) ;

  FileName 既可以是全路徑名也可以僅是文件名對於後者系統將在當前目錄下查找

  AssignFile是Delphi新提供的一個函數其功能等價於Object Pascal中的Assign而Assign在Delphi中更多地被用作一個方法名

  初始化讀寫有三種方式

   Reset : 為讀打開文件並把文件指針移動到文件首

   Rewrite : 為寫創建一個新文件

   Append : 為寫打開存在的文件並把文件指針定位在文件尾

  當使用Reset或Append過程而文件不存在時將會引發一個I/O異常有關I/O異常的處理請參看本章例程和第十二章中的介紹

  文件的關閉很簡單只須調用CloseFile過程即可

  雖然Delphi應用程序在退出時會自動關閉所有打開的文件但自己動手關閉文件可以確保釋放文件句柄並使程序的可移植性增強

  為保持兼容Delphi也允許用戶用Assign建立關聯Close關閉文件

   文本文件的讀寫

  從文本文件中讀取信息用ReadReadln兩個標准過程

  當讀入數值時ReadReadln假定數值是用一個或多個空格分開的而不是逗號分號或其它字符對如下一條語句

  Read ( TextFileVar Num Num Num ) ;

  如果文件中的數值是

  

  則能夠成功讀入而若文件中的數值是

  

  則Read讀入並試圖把它轉化成一個數值時會引發一個異常

  當讀入字符是字符串時ReadReadln過程總是讀取盡可能多的字符填充到字符串變量中或一直讀到行結束符為止因此從文本文件中讀取格式化的字符串數據必須聲明與其長度相匹配的字符串變量如果要從文件中讀取單詞必須先把文件中的每一行讀入字符串然後再從字符串中逐個分析出單詞或者一次只從文本文件中讀入一個字符並測試每個字符後是否是單詞斷開處

  格式化字符串之間的分隔符應讀入到一個臨時變量中而字符串與數值數值與數值間的分隔符讀入時會自動識別剔除對如下一行數據

  Mon :

  定義

  var

  Day: string[] ;

  Time: string[] ;

  Num Num: Integer ;

  則須用如下的read 語句讀入

  read ( TextFileVar Day c Time Num Num ) ;

  C為一個臨時字符變量

   文本文件的編輯

  在Delphi中實現對一個文本文件的編輯只須讓其與一個Tmemo控件建立關聯即可

  MemoLinesLoadFromFile ( TextFileName ) ;

  這樣在TMemo上所做的一切修改當調用Memo部件的SaveToFile方法後都會反映到文件中去

   記錄文件

  記錄文件是一種操作更為靈活的文件類型它允許同時為讀和寫打開而且由於記錄文件中每條記錄的長度固定所以可隨機存取

  記錄文件的類型變量可如下聲明

  var

  RecordFileVar: file of RecordType;

  RecordType是一個自定義的記錄類型

  有關記錄文件的操作我們將在下一節中結合例程進行討論

   無類型文件

  無類型文件提供了底層的I/O通道可用於存取可變長度記錄的文件經常用於文件的復制操作中由於Delphi提供了更好的方法(見第四節)所以無類型文件很少使用有興趣的讀者可參看BlockReadBlockWrite兩個聯機幫助主題

   Delphi的文件管理標准過程

  根據功能我們把標准過程劃分為十一類進行介紹

   文件的打開與關閉

  AssignFile :把一個外部文件名和一個文件變量相關聯

  Reset :打開一個存在的文件

  Rewrite :創建並打開一個新文件(或覆蓋原有文件)

  Append :以添加方式打開一個文件(只適用於文本文件)

  CloseFile : 關閉一個打開的文件

  FileOpen :打開一個特定的文件並返回文件句柄

  FileCreate :創建一個給定文件名的文件並返回文件句柄

  FileClose :關閉一個特定句柄的文件

  後邊三個文件主要供系統內部使用在文件復制的編程中也往往會用到它們操作的對象是文件句柄而不是文件變量

   文件定位

  Seek :把文件當前位置移到指定部分

  FilePos : 返回文件的當前位置

  Eoln : 返回行結束標志

  EOF : 返回文件結束標志

  FileSeek : 改變當前文件指針的位置

  Seek與FileSeek的區別是 Seek僅用於記錄文件 FileSeek的參數是文件句柄偏移量起始位置其中起始位置有文件首當前位置文件尾三種選擇Seek的參數是文件變量偏移量偏移量是從文件首開始定位的 FileSeek的偏移量以字節數來計算而Seek是根據記錄號進行移動

  SeekFilePos僅用於記錄文件但任何文件都可以看作是基於字節的記錄文件下面一段程序表示了它們的用法

  { 該例子的設計界面為一個包含TOpenDialog部件的窗體}

  uses Dialogs;

  var

  f: file of Byte;

  size: Longint;

  S: String;

  y: Integer;

  begin

  if OpenDialogExecute then

  begin

  AssignFile(f OpenDialogFileName)

  Reset(f)

  size := FileSize(f)

  S := File size in bytes: + IntToStr(size)

  y := ;

  CanvasTextOut( y S)

  y := y + CanvasTextHeight(S) + ;

  S := Seeking halfway into file…;

  CanvasTextOut( y S)

  y := y + CanvasTextHeight(S) + ;

  Seek(fsize div

  S := Position is now + IntToStr(FilePos(f))

  CanvasTextOut( y S)

  CloseFile(f)

  end;

  end

   文件刪除與截斷

  Erase : 刪除一個存在的文件

  DeleteFile : 刪除一個文件

  Truncate :從文件當前位置將文件截斷

  Erase與DeleteFile的區別是Erase以文件變量為參數當文件不能刪除時引起一個異常DeleteFile以文件名為參數當文件不存在或不能刪除時返回False而並不引起一個異常

[]  []  []  []  


From:http://tw.wingwit.com/Article/program/Delphi/201311/25240.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.