Presentation is loading. Please wait.

Presentation is loading. Please wait.

|13 檔案資料讀寫.

Similar presentations


Presentation on theme: "|13 檔案資料讀寫."— Presentation transcript:

1 |13 檔案資料讀寫

2 |檔案與儲存的資料 C 語言的原始程式碼檔案是一種純文字檔。 以 .c 命名,儲存原始程式碼的內容文字。
13.1 檔案與資料 |檔案與儲存的資料 C 語言的原始程式碼檔案是一種純文字檔。 以 .c 命名,儲存原始程式碼的內容文字。 將副檔名調整為 .txt ,也可以透過文字編輯器開啟。  開啟檔案 >>

3 13.1 檔案與資料 |開啟檔案 << 檔案與儲存的資料    檔案讀寫 >>

4 13.1 檔案與資料 |檔案讀寫 << 開啟檔案    檔案處理函數 >>

5 13.2 檔案處理函數 |檔案處理函數 << 檔案讀寫    fopen() >>

6 |fopen() FILE *fopen(const char* ,const char*) 13.3 檔案操作 13.3.1 開啟檔案
<< 檔案處理函數    fopen() >>

7 |fopen() FILE *fopen(const char* ,const char*)
13.3 檔案操作 |fopen() 開啟檔案 FILE *fopen(const char* ,const char*) fopen 以 「*」 標示,是一個指標,表示回傳值是一個位址 透過回傳的指標取得此開啟的檔案,進一步對其進行存取。 第一個引數為所要開啟的檔案路徑名稱字串,例如 C:\\cexample\\myfile.txt 第 2 個引數則是檔案的開啟模式 12 11 10 9 8 7 6 5 4 3 2 1 << fopen()    範例:開啟檔案 >>

8 |範例:開啟檔案 找不到檔案 找到檔案 13.3 檔案操作 13.3.1 開啟檔案 4 3 2 1 << fopen()
 fclose() >>

9 |fclose() int fclose(File *) 將不需要的關閉檔案避免資源浪費 檔案讀寫的緩衝區問題 指標變數表示所要關閉的檔案
13.3 檔案操作 |fclose() 關閉檔案 int fclose(File *) 12 將不需要的關閉檔案避免資源浪費 檔案讀寫的緩衝區問題 指標變數表示所要關閉的檔案 11 10 9 8 7 6 5 4 3 2 1 << 範例:開啟檔案    範例:關閉檔案>>

10 13.3 檔案操作 |範例:關閉檔案 關閉檔案 2 1 << fclose()     getc() >>

11 |getc() int getc(FILE *) 參數為所要讀取的檔案指標 針對此檔案讀取檔案中目前位置的下一個字元 13.4 檔案讀取
讀取單一字元 int getc(FILE *) 參數為所要讀取的檔案指標 針對此檔案讀取檔案中目前位置的下一個字元 << 範例:關閉檔案    範例:讀取檔案內容 >>

12 |範例:讀取檔案內容 G 13.4 檔案讀取 13.4.1 讀取單一字元 4 3 2 1 << getc()
 範例:迴圈讀取檔案內容 >>

13 |範例:迴圈讀取檔案內容 G O O D NIGHT AND GOOD LUCK 13.4 檔案讀取 13.4.1 讀取單一字元 6 12
5 11 4 10 3 9 2 8 1 7 G O O D NIGHT AND GOOD LUCK << 範例:讀取檔案內容    逐字元讀取 >>

14 |逐字元讀取 13.4 檔案讀取 13.4.1 讀取單一字元 << 範例:迴圈讀取檔案內容
<< 範例:迴圈讀取檔案內容    範例:迴圈讀取檔案內容 >>

15 |範例:迴圈讀取檔案內容 …,32,76,85,67,75,-1 printf("%d,",c) ; 13.4 檔案讀取
讀取單一字元 printf("%d,",c) ; …,32,76,85,67,75,-1 2 1 << 逐字元讀取    範例:讀取指定數量字元的檔案內容 >>

16 |範例:讀取指定數量字元的檔案內容 13.4 檔案讀取 13.4.2 讀取字串 3 2 1 << 範例:迴圈讀取檔案內容
<< 範例:迴圈讀取檔案內容    printf() >>

17 |printf() int putc(int c, FILE *fp); 第 1 個引數為寫入檔案的字元 第 2 個引數為寫入檔案的位址指標
13.5 檔案寫入 |printf() 寫入單一字元 int putc(int c, FILE *fp); 第 1 個引數為寫入檔案的字元 第 2 個引數為寫入檔案的位址指標 回傳寫入的字元,如果寫入失敗,則回傳 EOF 。 << 範例:讀取指定數量字元的檔案內容    範例:寫入單一字元 >>

18 |範例:寫入單一字元 13.5 檔案寫入 13.5.1 寫入單一字元 12 11 10 9 8 7 6 5 4 3 2 1
<< printf()    範例:寫入單一字元 >>

19 |範例:寫入單一字元 13.5 檔案寫入 13.5.1 寫入單一字元 2 1 << 範例:寫入單一字元
<< 範例:寫入單一字元    範例:寫入單一字元 >>

20 |範例:寫入單一字元 13.5 檔案寫入 13.5.1 寫入單一字元
FILE *of = fopen("C:\\hello.txt","a") ; 4 3 2 1 << 範例:寫入單一字元    範例:寫入字元陣列 >>

21 |範例:寫入字元陣列 13.5 檔案寫入 13.5.1 寫入單一字元 3 2 1 << 範例:寫入單一字元
<< 範例:寫入單一字元    fputs() >>

22 |fputs() 第 1 個參數是字串,它會被寫入 fp 指標位址所指向的檔案 寫入的動作發生失敗,則會回傳 EOF
13.5 檔案寫入 |fputs() 寫入字串 int fputs(const char *s,FILE * fp); 第 1 個參數是字串,它會被寫入 fp 指標位址所指向的檔案 寫入的動作發生失敗,則會回傳 EOF << 範例:寫入字元陣列    範例:寫入字串 >>

23 13.5 檔案寫入 |範例:寫入字串 寫入字串 3 2 1 << fputs()    範例:檔案複製 >>

24 |範例:檔案複製 13.6 複製檔案 GOOD NIGHT AND GOOD LUCK 4 3 2 1 << 範例:寫入字串
<< 範例:寫入字串    檔案關閉與緩衝區 >>

25 |檔案關閉與緩衝區 /* c = fclose(of) ; */ 程式在寫入檔案完成之後,不會自動關閉檔案 指定的字元並沒有寫入檔案
13.7 緩衝區 |檔案關閉與緩衝區 /* c = fclose(of) ; */ 程式在寫入檔案完成之後,不會自動關閉檔案 指定的字元並沒有寫入檔案 << 範例:檔案複製    無緩衝區讀寫 >>

26 |無緩衝區讀寫 13.8 無緩衝區資料讀寫 13.8.1 無緩衝區檔案讀寫函數 << 檔案關閉與緩衝區
<< 檔案關閉與緩衝區    open() >>

27 |open() 第 1 個參數為所要開啟的檔案 第 2 個參數是開啟的模式
13.8 無緩衝區資料讀寫 |open() 開啟與關閉檔案 int open(const char *fpath,int openm [,int rwm]) ; 第 1 個參數為所要開啟的檔案 第 2 個參數是開啟的模式 第 3 個參數則是檔案的存取屬性,這個參數是選擇性的,只有在第 2 個參數是特定值情形下才有效果 3 2 1 << 無緩衝區讀寫    開啟常數合併 >>

28 |開啟常數合併 O_WRONLY | O_CREAT | O_APPEND 13.8 無緩衝區資料讀寫 13.8.2 開啟與關閉檔案
<< open()    範例:開啟檔案 >>

29 |範例:開啟檔案 13.8 無緩衝區資料讀寫 13.8.2 開啟與關閉檔案 3 2 1 << 開啟常數合併
<< 開啟常數合併    close() >>

30 |close() int close(int handle) ; 參數 handle 是所要關閉的檔案 也就是成功開啟檔案時所回傳的值
13.8 無緩衝區資料讀寫 |close() 開啟與關閉檔案 int close(int handle) ; 參數 handle 是所要關閉的檔案 也就是成功開啟檔案時所回傳的值 << 開啟檔案    範例:開啟與關閉檔案 >>

31 |範例:開啟與關閉檔案 開啟檔案代號:3 檔案順利關閉 13.8 無緩衝區資料讀寫 13.8.2 開啟與關閉檔案 5 4 3 2 1
<< close()    read() 與 write() >>

32 |read() 與 write() int read(int handle,char *buf,unsigned int count);
13.8 無緩衝區資料讀寫 |read() 與 write() 讀寫檔案 int read(int handle,char *buf,unsigned int count); 第 1 個參數 handle 為成功開啟檔案之後所回傳的檔案編號 第 2 個參數 buf 儲存所讀取的資料 第 3 個參數為所要讀取的位元組數目 回傳值如果是 -1 表示資料讀取失敗,否則表示 read() 實際讀取的位元組數目 int write(int handle,char *buf, unsigned int count); 第 1 個參數如上述,在這裡是指所要寫入的目標檔 案,接下來的 buf 則是要寫入檔案的內容 第 3 個參數則是所要寫入的位元組數目,回傳值則是實際寫入的位元組,如果是 -1 ,表示寫入失敗 << 範例:開啟與關閉檔案    範例:開啟複製 >>

33 |範例:開啟複製 13.8 無緩衝區資料讀寫 13.8.3 讀寫檔案 << read() 與 write()
 fread() 與 fwrite() >>

34 |fread() 與 fwrite() 13.9 二進位格式檔案讀寫 13.9.1 fread() 與 fwrite()
<< 範例:開啟複製    fopen() 與 fwrite() >>

35 |fopen() 與 fwrite() FILE *of = fopen("hellobin.bin","rb") ;
13.9 二進位格式檔案讀寫 |fopen() 與 fwrite() fread() 與 fwrite() FILE *of = fopen("hellobin.bin","rb") ; 第 2 個參數指定了 rb ,因此會以二進位格式開啟 hellobin.bin ,以支援檔案讀取作業。 size_t fwrite(const void *pt, size_t size, size_t nmemb, FILE *fp); 第 1 個參數 pt 是要寫入檔案的資料位址指標 第 2 個參數 size 為每一次所要寫入的資料單位 第 3 個參數則是可能讀取的最大值 最後一個參數 fp 為資料讀取的來源檔案 回傳值代表成功寫入的元素數量,這個值會與第 3 個參數相同,除非 遇到寫入的錯誤。 << fread() 與 fwrite()     範例:寫入二進位格式檔案 >>

36 |範例:寫入二進位格式檔 總共寫入 3 個 int 13.9 二進位格式檔案讀寫 13.9.1 fread() 與 fwrite() 4 3
2 1 << fopen() 與 fwrite()     fread() 與 fwite() >>

37 |fread() 與 fwrite() 寫入一般型態: int x = 100 ;
13.9 二進位格式檔案讀寫 |fread() 與 fwrite() fread() 與 fwrite() 寫入一般型態: int x = 100 ; fwrite(&x,sizeof(int),1,of) ; 第 1 行是一個 int 型態的整數值 第 2 行將其寫入指定的目標檔案,其中的第一個參數必須指定為 &x 。 size_t fread(void * restrict pt, size_t size, size_t nmemb, FILE * restrict fp); 執行檔案的讀取動作,回傳值代表成功讀取的元素數量 << 範例:寫入二進位格式檔    範例:讀取二進位格式檔 >>

38 |範例:讀取二進位格式檔 總共讀取 3 個 int 100 200 300 13.9 二進位格式檔案讀寫
fread() 與 fwrite() 總共讀取 3 個 int 100 200 300 7 6 5 4 3 2 1 << fread() 與 fwrite()     open() >>

39 |open() open(filepath, O_WRONLY|O_CREAT|O_BINARY,S_IWRITE) ;
13.9 二進位格式檔案讀寫 |open() 無緩衝區的檔案讀寫 open(filepath, O_WRONLY|O_CREAT|O_BINARY,S_IWRITE) ; 第 2 個參數指定了 O_BINARY ,如此一來就會以二進位格式的方式讀寫檔案。 << 範例:讀取二進位格式檔    範例:二進位檔案讀寫 >>

40 |範例:二維位檔案讀寫 寫入位元組:12 讀取位元組:12 讀取內容: 444 666 888 13.9 二進位格式檔案讀寫
無緩衝區的檔案讀寫 寫入位元組:12 讀取位元組:12 讀取內容: 444 666 888 4 3 2 1 << open()     |


Download ppt "|13 檔案資料讀寫."

Similar presentations


Ads by Google