一、C文件的有關基本知識
- 程序設計中主要用到兩種文件
- 程序文件:其內容是程序代碼
- 數據文件
- 文本文件(ASCII文件)
- 二進制文件
- stdio.h頭文件中有關於文件類型FILE的聲明,使用時一般都是設置一個指向FILE類型變量的指針變量
二、打開與關閉文件
2.1 用fopen函數打開數據文件
- fopen函數的調用方式為,fopen(文件名,使用文件方式);,例如:fopen("data.txt", "r");
- 打開成功,fopen返回一個指向文件的指針,否則返回NULL
- 常用的使用文本文件方式如下
- "r":只能從文件中讀數據,該文件必須先存在,否則打開失敗
- "w":只能向文件寫數據,若指定的文件不存在則創建它,如果存在則先刪除它再重建一個新文件
- "a":向文件增加新數據(不刪除原有數據),若文件不存在則打開失敗,打開時位置指針移到文件末尾
- "r+":可讀/寫數據,該文件必須先存在,否則打開失敗
- "w+":可讀/寫數據,用該模式打開新建一個文件,先向該文件寫數據,然后可讀取該文件中的數據
- "a+":可讀/寫數據,原來的文件不被刪去,位置指針移到文件末尾
- 打開二進制文件的模式與打開文本文件的含義是一樣的,不同的是模式名稱里面多一個字母'b’,“rb”“wb”“ab”“rb+”“wb+”“ab+”
2.2 用fclose函數關閉數據文件
- 在使用完一個文件后應該關閉它,以防止它再被誤用,如果不關閉文件將會丟失數據
- fclose函數調用的一般形式為,fclose(文件指針);
- 關閉成功,返回值為0,否則返回EOF(-1)
三、順序讀寫數據文件
3.1 向文件讀寫字符
- fgetc(fp),從fp指向的文件讀入一個字符,讀成功,返回所讀字符;失敗則返回EOF
- fputc(ch, fp),把字符ch寫到fp指向的文件中,輸出成功,返回值為輸出的字符;失敗則返回EOF
- 使用feof(fp)可以檢查文件讀寫位置標記是否移到文件末尾,即文件是否結束,如果是,則函數返回值為1,否則為0
3.2 向文件讀寫字符串
- fgets(str, n, fp),從fp指向的文件讀入一個長度為n-1的字符串,存放到字符數組str中,讀成功,返回地址str;失敗則返回NULL
- fputs(str, fp), 把str所指向的字符串寫到fp指向的文件中,輸出成功返回0,否則返回非0值
3.3 用格式化的方式讀寫文件
- 用fprintf函數和fscanf函數對文件進行格式化輸入輸出
- 它們的作用和printf、scanf函數相仿,都是格式化讀寫函數,只有一點不同:fprintf和fscanf函數的讀寫對象不是終端而是文件
- 例如
- fprintf(fp, "%d, %s, %c", num, name, gender);
- fscanf(fp, "%d, %s, %c", &num, name, &gender);
3.4 用二進制方式向文件讀寫一組數據
- 當要求一次存取一組數據(如,一個數組、一個結構體變量的值),fread和fwrite函數可以解決該類問題
- 它們的調用形式一般為:
- fread(buffer, size, count, fp);
- fwrite(buffer, size, count, fp);
- buffer:對於fread來說,指的是讀入數據的存放地址;對於fwrite來說,是要輸出數據的地址
- size:讀寫數據時,每組數據的大小
- count:讀寫多少組數據
- fp:文件指針