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

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

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

   記錄文件的打開和創建

  記錄文件的打開和創建同文本文件一樣也需要關聯和初始化兩個步驟同文本文件唯一的不同是不能使用Append過程

  記錄文件缺省情況下以讀寫方式打開如果想以只讀或只寫方式打開則需要修改System單元中定義的變量FileMode的值

  FileMode的取值和意義如下表

  表 FileMode的取值和意義

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

  取值 意義

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

   只讀

   只寫

   讀寫

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

  FileMode是一個全局變量對它的每次修改都將影響所有Reset的操作因此在打開自己的文件後應還原它的值

  在本系統中當用戶按下打開按鈕時首先彈出一個標准文件打開對話框要求用戶輸入或選擇文件名確認後如果該文件名的文件存在則用Reset打開若不存在則創建程序清單如下

  procedure TRecFileFormOpenButtonClick(Sender: TObject)

  begin

  if OpenDialogExecute then

  FileName := OpenDialogFileName

  else

  exit;

  AssignFile(MethodFileFilename)

  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;

  RecFileFormCaption := FormCaption+ +FileName;

  NewButtonEnabled := False;

  OpenButtonEnabled := False;

  CloseButtonEnabled := True;

  end;

  首先系統試圖用Reset打開一個文件並置FileOpened為True如果文件不能打開則引發一個I/O異常在異常處理過程中首先檢測文件是否存在若不存在則創建這個文件否則是其它原因引發的異常則把FileOpend重置為False 並顯示信息文件不能打開在文件創建過程中仍可能引發異常因而在一個嵌套的異常處理中把FileOpened重置為False並提示信息文件不能創建

  有關異常處理的內容請讀者參看第十二章這段程序說明異常處理機制不僅能使我們的程序更健壯而且為編程提供了靈活性

  當用戶按下創建按鈕時系統首先彈出一個標准輸入框要求用戶輸入文件名確認後系統首先檢測文件是否存在若存在則直接打開否則創建一個新文件打開或創建過程導致異常則重置FileName和FileOpened兩個全局變量

  procedure TRecFileFormNewButtonClick(Sender: TObject)

  begin

  FileName := InputBox(輸入框請輸入文件名

  if FileName = then Exit;

  try

  AssignFile(MethodFileFileName)

  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

  NewButtonEnabled := False;

  OpenButtonEnabled := False;

  CloseButtonEnabled := True;

  RecFileFormCaption := 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(MethodFileMethodRec)

  ShowMethod(MethodReci)

  end;

  ShowMehtod是一個過程用來把一條記錄填入StringGrid的一行中對於NameCondition域而言只須直接賦值即可而對Nature 域需要把枚舉類型值轉化為對應意義的字符串(:微觀:宏觀而對Result域則需要把數值轉化為一定格式的字符串

  Str (MethodRecResult::ResultStr)

  StringGridCells[Pos] := ResultStr;

  即Result顯示域寬為其中小數點後位數為

[]  []  []  []  


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