150 likes | 274 Views
檔案. 將資料存入磁碟或由磁碟取出資料的方式 , 稱為檔案存取處理。 C 語言的檔案處理 C++ 語言的檔案處理. 檔案的種類. 檔案依資料存取方式可分為循序檔與隨機檔 , 分別說明如下: 循序檔 採用整批儲存與整批取出資料的方式稱為循序檔 , 此種存取模式較適合文書檔的儲存。例如 , 當我們編輯一封書信時 , 通常都是整篇儲存 , 編輯時亦是整篇取出修改後全部儲存。 隨機檔
E N D
檔案 將資料存入磁碟或由磁碟取出資料的方式, 稱為檔案存取處理。 • C語言的檔案處理 • C++語言的檔案處理
檔案的種類 檔案依資料存取方式可分為循序檔與隨機檔, 分別說明如下: • 循序檔 採用整批儲存與整批取出資料的方式稱為循序檔, 此種存取模式較適合文書檔的儲存。例如, 當我們編輯一封書信時, 通常都是整篇儲存, 編輯時亦是整篇取出修改後全部儲存。 • 隨機檔 可以指定資料位置的存取方式稱為隨機檔, 此種存取模式較適合數值資料的儲存。例如, 你可能從一堆學生資料中讀取或修改某一個人的成績。又例如, 104 的電話查號, 亦是從一大堆資料中讀取一筆資料, 此時當然沒有必要將全部資料全部載入記憶體, 而是依照自己的需求讀取指定位置的某一或某些筆資料即可, 此時即需使用隨機檔。
檔案處理的演進 • C 語言 程序導向的C 語言是採用fopen、fclose 、fprintf、fscanf 及feof 等函式處理循序或隨機檔案, 請看15-1 節。 • C + + 語言 物件導向的C++ 語言是採用ifstream 、ofstream 等類別的方式處理循序或隨機檔案, 請看15-2 節。 • C++ Builder C++ Builder 則是採用資料庫元件的方式處理檔案, 由於資料庫元件已有長足的進步, 所以本書於第16 ~22 章大力介紹這些資料庫元件。關於C 與C++ 的檔案處理則僅以循序檔簡介, 讀者可於此體會這些程式語言的演進。
15 -1 C 語言的檔案處理 • C 語言常用的檔案處理函式, 分別是fopen 、fclose 、fprintf 、fscanf 、feof、fseek 、fwrite 、fread、fileno 、filelength 及sizeof 等函式, 使用這些函式前應匯入stdio.h, 如下所示。 #include <stdio.h>
fopen • 當您欲從磁碟存取資料時, 首先必須以fopen 開啟指定的檔案, 其函式原型共有兩種多載如下, 本單元僅舉例說明第一種多載。 • 其中mode 是開檔的模式, 所有模式如下圖所示。 • 例如, 以下敘述可開啟test1.txt, 並準備寫入資料。 FILE *outf; outf=fopen("c:\\BCBbook\\ch15\\test1.txt", "w");
fprintf • 當您欲寫入資料至檔案時, 只要重覆使用fprintf 即可寫入資料, 其函式原型如下圖。 • format format 是資料的格式, 詳細如下圖。
Conversion-type character 所有的資料均應格式化才可存檔, 其格式化字元如下圖。 • 例如, 以下敘述可寫入字串, 其中outf 是開檔時所傳回的檔案指標。 fprintf(outf, "%s", "ABC"); • 以下敘述可寫入整數。 fprintf(outf, "%d", 25); • 以下敘述, 可同時寫入一個字串, 一個整數及一個浮點數。 fprint(outf, "%s %d %f", " 子堯", 90, 25.5);
fscanf • 當您欲從檔案讀取資料時, 只要重覆使用fscanf 即可讀取資料, 其函式原型如下, 使用方式同fprintf 。
fclose • 將緩衝區的資料寫入磁碟, 其語法如下: int fclose(file *stream); • 當寫入成功時, 傳回0。
feof • 傳回檔案指標是否已在檔案的最後面, 若是則傳回非零值;若否則傳回0。其語法如下: int feof(File *stream);
範例15-1a • 請寫一個程式, 可以將RichEdit 元件的內容存入檔案且能將文字檔載入RichEdit 。
1 5 -2 C ++ 語言的檔案處理 • 眾所皆知, C++ 是物件導向的程式語言, 所以在檔案的處理亦實作了許多關於檔案的類別, 例如ofstream 、ifstream 與fstream 等類別。若要使用這些類別, 則應先匯入fstream, 如以下敘述。 #include <fstream.h>
ofstream • ofstream 是專門處理資料輸出的類別, 以下兩種方式皆可建立一個fout物件, 此物件可將資料輸出至C:\BCBbook\ch15\test1.txt 。 ofstream fout ("C:\\BCBbook\\ch15\\test1.txt"); • 或 ofstream fout; fout.open("C:\\BCBbook\\ch15\\test1.txt", ios::out); • 以下敘述皆可將"ABCDEF" 寫入指定的檔案。 fout.write("ABCDEF", 6); • 或 fout << "ABCDEF";
ifstream • ifstream 是專門處理資料輸入的類別, 以下敘述可建立一個fin 物件, 並將C:\BCBbook\ch15\test1.txt 的內容指派由RichEdit 元件顯示。 ifstream fin; String ss=""; char ch; fin.open("c:\\BCBbook\\ch15\\test1.txt", ios::in); w h i l e ( f i n . g e t ( c h ) ) ss=ss+ch; f i n . c l o s e ( ) ; R i c h Ed i t 1 - >T e x t= s s ;
範例15-2a • 示範C++ 的檔案處理