Presentation is loading. Please wait.

Presentation is loading. Please wait.

C 程式設計— 檔案處理 台大資訊工程學系 資訊系統訓練班.

Similar presentations


Presentation on theme: "C 程式設計— 檔案處理 台大資訊工程學系 資訊系統訓練班."— Presentation transcript:

1 C 程式設計— 檔案處理 台大資訊工程學系 資訊系統訓練班

2 課程大綱 C語言簡介 基本資料型態, 變數, 基本輸入輸出 控制敘述- 選擇控制與重覆控制 陣列 函式 指標 字元與字串 結構 檔案處理

3 本次課程大綱 C語言的檔案處理 檔案類型 開檔與關檔 檔案I/O函式 隨機式存取 二進位檔的存取

4 C語言的檔案觀念 C語言將資料都看成由一連串字元組成的資料流(stream).
標準檔案I/O函數在fopen()開啟一個檔案後,C語言會要求作業系統在主記憶體保留一塊空間做為檔案I/O的缓衝區.所有檔案I/O動作則是對這塊缓衝區做字元的讀取跟寫入,直到檔案被關閉後fclose(),檔案的內容才會真正寫回儲存設備.

5 檔案類型 文字檔: 二進位檔: 方便閱讀,但較無保密性。其他使用者也可以透過純文字編輯器開啟並成功閱讀。
I/O速度較快並具有保密性,但檔案內容需透過程式轉譯才能閱讀。二進位檔的資料是由一連串的位元組(Byte)所組合,通常使用在某些特殊用途(例如圖檔)

6 文字資料與二元資料 文字資料流以字串形成儲存在檔案中,以’\n’做為換行字元,以’^Z’做為EOF 二元資料流與記憶體相同格式來儲存在檔案中

7 檔案的開啟跟關閉 fopen()跟fclose()
對某個檔案進行讀取寫入的動作前,一定要先開啟檔案,當將資料處理完成後,還要關閉檔案,我們稱之為缓衝式的I/O處理,其功能在增進檔案處理效率,因而無須時時讀取磁碟機.

8 FILE FILE是在stdio.h中宣告的結構體,主要用於存放I/O stream在主記憶體的位址.
FILE能記錄下一個讀取或寫入字元目前位於stream的位址,檔案讀寫狀況,及檔案讀寫是否有錯誤發生.

9 fopen() FILE *fopen (char filename, char mode); filename代表要開啟的檔案名稱.
若開啟檔案有誤,則回傳NULL。

10 fopen()開啟檔案的模式 Mode 功能說明 “r” 開啟一個只能讀取資料的檔案
“w” 建立用來寫入資料的檔案,若檔案存在,其內容會被覆蓋 “a” 將新的資料加在檔尾;若檔案不存在,則另建新檔 “+” 提供可寫可讀的功能,但不能單獨存在 以上4種模式可以混合使用, 例如 “rw” “ra” “r+”… 代表文字資料流的話要加”t”, 內定是文字模式 代表二元資料流的話要加”b”

11 fclose() int *fclose(FILE *fp); 當回傳值為-1時,代表關閉檔案時發生錯誤。當回傳值等於0,則表示成功關閉檔案
例子: 嘗試開啟檔案跟關閉檔案.

12 I/O函式 C語言的檔案I/O處理功能是由函式庫所提供的,ANSI提供一套標準檔案I/O函式,使在不同作業系統下,能有一套標準的I/O函式.

13 字元I/O函式 fgetc()跟fputc() int fgetc(FILE* fp);
傳回所讀取的字元, 如果是EOF則代表讀到檔案結尾. Int *fputc(int c, FILE *fp); 傳回EOF表示寫入過程有錯誤,傳回c則表示成功寫入.

14 例子 例子1: 輸入資料到檔案中. 例子2: 讀取一個文字檔,並印在螢幕上.

15 字串I/O函式 char *fgets(char *str,int n, FILE *fp);
從檔案讀取一行字串,傳回NULL代表有錯誤發生或檔案結束. int fputs(char *str, FILE *fp); 傳回-1(EOF)表示有錯誤發生.

16 格式化I/O函式 int fscanf(FILE *fp, char *format …);
傳回0表示有錯誤,否則傳回成功輸出的資料數. int fprintf(FILE *fp, char *format …); 例子: 以指定的格式輸出學生序號,姓名及英數成積到檔案.

17 隨機讀寫 int fseek(FILE *fp, long offset, int where);
傳為0代表成功,否則失敗 offset:偏移檔案指標offset個位置。 where=0, 代表檔案的起始位置 where=1, 代表目前檔案的指標位置 where=2, 代表檔案的結尾 例子:移到檔案末端, 使用fseek()更新檔案.

18 二元資料的開啟 fopen(filename,"rb"); /* 開檔時,指定讀取binary檔案 */
fopen(filename,"wb"); /* 開檔時,指定寫入資料到binary檔案 */ fopen(filename,"ab"); /* 開檔時,指定將資料加在binary檔案的後面 */ 例子

19 二元資料的讀取跟寫入(1) size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream); 回傳值:實際讀取的資料筆數,size_t資料型態定義於stdio,通常是unsigned int的別名。 ptr:存放資料的緩衝區指標。 size:要讀取的資料型態大小。 nmemb:要讀取的資料筆數。 stream:一個已開啟的檔案指標,代表要讀取的檔案串流。

20 二元資料的讀取跟寫入(2) size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream); 回傳值:實際寫入的資料筆數,size_t資料型態定義於stdio,通常是unsigned int的別名。 ptr:存放資料的緩衝區指標。 size:要寫入的資料型態大小。 nmemb:要寫入的資料筆數。 stream:一個已開啟的檔案指標,代表要寫入的檔案串流。 例子

21 練習時間 請將員工資料,寫入二進位檔,並讀出

22 今天學到了什麼 什麼是C語言的檔案處理 什麼是檔案類型 如何使用開檔與關檔 如何使用檔案I/O函式 如何隨機存取檔案 如何存取二進位檔


Download ppt "C 程式設計— 檔案處理 台大資訊工程學系 資訊系統訓練班."

Similar presentations


Ads by Google