| 13 檔案資料讀寫
DESCRIPTION
| 13 檔案資料讀寫. 13.1 檔案與資料. | 檔案與儲存的資料. C 語言的原始程式碼檔案是一種純文字檔。 以 .c 命名,儲存原始程式碼的內容文字。 將副檔名調整為 .txt ,也可以透過文字編輯器開啟。. |. 開啟檔案 >>. 13.1 檔案與資料. | 開啟檔案. >. 13.1 檔案與資料. | 檔案讀寫. >. 13.2 檔案處理函數. | 檔案處理函數. >. - PowerPoint PPT PresentationTRANSCRIPT
C 語言入門經典 開啟檔案 >> |
|檔案與儲存的資料 13.1 檔案與資料
• C 語言的原始程式碼檔案是一種純文字檔。• 以 .c 命名,儲存原始程式碼的內容文字。• 將副檔名調整為 .txt ,也可以透過文字編輯器開啟。
C 語言入門經典 fopen() >> << 檔案處理函數
| fopen() 13.3 檔案操作
FILE *fopen(const char* ,const char*)
13.3.1 開啟檔案
C 語言入門經典
5
4
3
2
1
範例:開啟檔案 >> << fopen()
6
7
8
9
10
11
12
FILE *fopen(const char* ,const char*)
| fopen() 13.3 檔案操作
13.3.1 開啟檔案
• fopen 以 「 * 」 標示,是一個指標,表示回傳值是一個位址• 透過回傳的指標取得此開啟的檔案,進一步對其進行存取。• 第一個引數為所要開啟的檔案路徑名稱字串,例如 C:\\cexample\\m
yfile.txt
• 第 2 個引數則是檔案的開啟模式
C 語言入門經典
4
3
2
1
fclose() >> << fopen()
|範例:開啟檔案 13.3 檔案操作
13.3.1 開啟檔案
找不到檔案找到檔案
C 語言入門經典
5
4
3
2
1
範例:關閉檔案 >> << 範例:開啟檔案
6
7
8
9
10
11
12
| fclose()13.3 檔案操作
13.3.2 關閉檔案
int fclose(File *)
• 將不需要的關閉檔案避免資源浪費• 檔案讀寫的緩衝區問題• 指標變數表示所要關閉的檔案
C 語言入門經典 範例:讀取檔案內容 >> << 範例:關閉檔案
| getc()13.4 檔案讀取
13.4.1 讀取單一字元
int getc ( FILE * )• 參數為所要讀取的檔案指標• 針對此檔案讀取檔案中目前位置的下一個字元
C 語言入門經典
4
3
2
1
範例:迴圈讀取檔案內容 >> << getc()
|範例:讀取檔案內容 13.4 檔案讀取
13.4.1 讀取單一字元
G
C 語言入門經典 逐字元讀取 >> << 範例:讀取檔案內容
|範例:迴圈讀取檔案內容 13.4 檔案讀取
13.4.1 讀取單一字元
NIGHT AND GOOD LUCKGOOD
5
4
3
2
1
6
7
8
9
10
11
12
C 語言入門經典2
1
範例:讀取指定數量字元的檔案內容 >> << 逐字元讀取
|範例:迴圈讀取檔案內容 13.4 檔案讀取
13.4.1 讀取單一字元
printf("%d,",c) ;
…,32,76,85,67,75,-1
C 語言入門經典
3
2
1
printf() >> << 範例:迴圈讀取檔案內容
|範例:讀取指定數量字元的檔案內容 13.4 檔案讀取
13.4.2 讀取字串
C 語言入門經典 範例:寫入單一字元 >> << 範例:讀取指定數量字元的檔案內容
| printf()13.5 檔案寫入
13.5.1 寫入單一字元
int putc(int c, FILE *fp);
• 第 1 個引數為寫入檔案的字元• 第 2 個引數為寫入檔案的位址指標• 回傳寫入的字元,如果寫入失敗,則回傳 EOF 。
C 語言入門經典
5
4
3
2
1
範例:寫入單一字元 >> << printf()
6
7
8
9
10
11
12
|範例:寫入單一字元 13.5 檔案寫入
13.5.1 寫入單一字元
C 語言入門經典
3
2
1
範例:寫入字元陣列 >> << 範例:寫入單一字元
|範例:寫入單一字元 13.5 檔案寫入
13.5.1 寫入單一字元
FILE *of = fopen("C:\\hello.txt","a") ;
4
C 語言入門經典 範例:寫入字串 >> << 範例:寫入字元陣列
| fputs()
int fputs(const char *s,FILE * fp);
• 第 1 個參數是字串,它會被寫入 fp 指標位址所指向的檔案• 寫入的動作發生失敗,則會回傳 EOF
13.5 檔案寫入
13.5.2 寫入字串
C 語言入門經典
4
3
2
1
檔案關閉與緩衝區 >> << 範例:寫入字串
|範例:檔案複製 13.6 複製檔案
GOOD NIGHT AND GOOD LUCK
C 語言入門經典 無緩衝區讀寫 >> << 範例:檔案複製
|檔案關閉與緩衝區/* c = fclose(of) ; */• 程式在寫入檔案完成之後,不會自動關閉檔案• 指定的字元並沒有寫入檔案
13.7 緩衝區
C 語言入門經典
3
2
1
開啟常數合併 >> << 無緩衝區讀寫
| open()13.8 無緩衝區資料讀寫
13.8.2 開啟與關閉檔案
int open(const char *fpath,int openm [,int rwm]) ;
• 第 1 個參數為所要開啟的檔案• 第 2 個參數是開啟的模式
• 第 3 個參數則是檔案的存取屬性,這個參數是選擇性的,只有在第 2 個參數是特定值情形下才有效果
C 語言入門經典 範例:開啟檔案 >> << open()
|開啟常數合併
O_WRONLY | O_CREAT | O_APPEND
13.8 無緩衝區資料讀寫
13.8.2 開啟與關閉檔案
C 語言入門經典 範例:開啟與關閉檔案 >> << 開啟檔案
| close()13.8 無緩衝區資料讀寫
13.8.2 開啟與關閉檔案
int close(int handle) ;
• 參數 handle 是所要關閉的檔案• 也就是成功開啟檔案時所回傳的值
C 語言入門經典
5
4
3
2
1
read() 與 write() >> << close()
|範例:開啟與關閉檔案 13.8 無緩衝區資料讀寫
13.8.2 開啟與關閉檔案
開啟檔案代號: 3檔案順利關閉
C 語言入門經典 範例:開啟複製 >> << 範例:開啟與關閉檔案
| read() 與 write()13.8 無緩衝區資料讀寫
13.8.3 讀寫檔案
int read(int handle,char *buf,unsigned int count);
int write(int handle,char *buf, unsigned int count);
• 第 1 個參數 handle 為成功開啟檔案之後所回傳的檔案編號• 第 2 個參數 buf 儲存所讀取的資料• 第 3 個參數為所要讀取的位元組數目• 回傳值如果是 -1 表示資料讀取失敗,否則表示 read() 實際讀取的
位元組數目
• 第 1 個參數如上述,在這裡是指所要寫入的目標檔• 案,接下來的 buf 則是要寫入檔案的內容• 第 3 個參數則是所要寫入的位元組數目,回傳值則是實際寫入的位
元組,如果是 -1 ,表示寫入失敗
C 語言入門經典 fread() 與 fwrite() >> << read() 與 write()
|範例:開啟複製 13.8 無緩衝區資料讀寫
13.8.3 讀寫檔案
C 語言入門經典 fopen() 與 fwrite() >> << 範例:開啟複製
| fread() 與 fwrite()13.9 二進位格式檔案讀寫
13.9.1 fread() 與 fwrite()
C 語言入門經典 範例:寫入二進位格式檔案 >> << fread() 與 fwrite()
FILE *of = fopen("hellobin.bin","rb") ;
size_t fwrite(const void *pt,size_t size, size_t nmemb,FILE *fp);
| fopen() 與 fwrite()13.9 二進位格式檔案讀寫
13.9.1 fread() 與 fwrite()
• 第 2 個參數指定了 rb ,因此會以二進位格式開啟 hellobin.bin ,以支援檔案讀取作業。
• 第 1 個參數 pt 是要寫入檔案的資料位址指標• 第 2 個參數 size 為每一次所要寫入的資料單位• 第 3 個參數則是可能讀取的最大值• 最後一個參數 fp 為資料讀取的來源檔案• 回傳值代表成功寫入的元素數量,這個值會與第 3 個參數相同,除非• 遇到寫入的錯誤。
C 語言入門經典
3
2
1
fread() 與 fwite() >> << fopen() 與 fwrite()
|範例:寫入二進位格式檔
總共寫入 3 個 int4
13.9 二進位格式檔案讀寫
13.9.1 fread() 與 fwrite()
C 語言入門經典 範例:讀取二進位格式檔 >> << 範例:寫入二進位格式檔
13.9 二進位格式檔案讀寫
13.9.1 fread() 與 fwrite()
int x = 100 ;fwrite(&x,sizeof(int),1,of) ;
• 寫入一般型態:| fread() 與 fwrite()
• 第 1 行是一個 int 型態的整數值• 第 2 行將其寫入指定的目標檔案,其中的第一個參數必須指定為 &x 。size_t fread(void * restrict pt,
size_t size, size_t nmemb,FILE * restrict fp);
• 執行檔案的讀取動作,回傳值代表成功讀取的元素數量
C 語言入門經典
5
4
3
2
1
open() >> << fread() 與 fwrite()
6
7
|範例:讀取二進位格式檔 13.9 二進位格式檔案讀寫
13.9.1 fread() 與 fwrite()
總共讀取 3 個 int100200300
C 語言入門經典 範例:二進位檔案讀寫 >> << 範例:讀取二進位格式檔
| open()
open(filepath,O_WRONLY|O_CREAT|O_BINARY,S_IWRITE) ;
13.9 二進位格式檔案讀寫
13.9.2 無緩衝區的檔案讀寫
• 第 2 個參數指定了 O_BINARY ,如此一來就會以二進位格式的方式讀寫檔案。
C 語言入門經典
4
3
2
1
| << open()
|範例:二維位檔案讀寫
寫入位元組: 12讀取位元組: 12讀取內容:444666888
13.9 二進位格式檔案讀寫
13.9.2 無緩衝區的檔案讀寫