C 語言把文件看作是一個字符(字節)的序列,即由一個一個字符(字節)的數據順序組成。根據數據的組織形式,可分為 ASCⅡ 文件和二進位文件。文件的操作包括:文件的打開、文件的關閉、文件的讀寫操作、文件狀態檢查以及文件的定位等。
1 文件的打開
1.1 函數原型
1.2 功能說明
按照 mode 規定的方式,打開由 pname指定的文件。若找不到由 pname 指定的相應文件,就按以下方式之一處理:
此時如 mode 規定按寫方式打開文件,就按由pname 指定的名字建立一個新文件;
此時如 mode 規定按讀方式打開文件,就會產生一個錯誤;
打開文件的作用:
分配給打開文件一個FILE 類型的文件結構體變量,並將有關信息填入文件結構體變量;
開闢一個緩衝區;
調用作業系統提供的打開文件或建立新文件功能,打開或建立指定文件;
:指出 fopen 是一個返回文件類型的指針函數;
1.3 參數說明
pname:是一個字符指針,它將指向要打開或建立的文件的文件名字符串。mode:是一個指向文件處理方式字符串的字符指針。
1.4 返回值
正常返回:被打開文件的文件指針。
異常返回:NULL,表示打開操作不成功。
要說明的是:C 語言將計算機的輸入輸出設備都看作是文件。例如,鍵盤文件、屏幕文件等。ANSI C 標準規定,在執行程序時系統先自動打開鍵盤、屏幕、錯誤三個文件。這三個文件的文件指針分別是:標準輸入 stdin、標準輸出 stdout 和標準出錯 stderr。
2 文件的關閉
2.1 函數原型
2.2 功能說明
關閉由 fp 指出的文件。此時調用作業系統提供的文件關閉功能,關閉由 fp->fd 指出的文件;釋放由 fp 指出的文件類型結構體變量;返回操作結果,即 0 或 EOF。
2.3 參數說明
fp:一個已打開文件的文件指針。
2.4 返回值
正常返回:0。
異常返回:EOF,表示文件在關閉時發生錯誤。
3 文件的讀寫操作
3.1 從文件中讀取一個字符3.1.1 函數原型
3.1.2 功能說明
從fp所指文件中讀取一個字符。
3.1.3 參數說明
fp:這是個文件指針,它指出要從中讀取字符的文件。
3.1.4返回值
正常返回: 返回讀取字符的代碼。
非正常返回:返回 EOF。例如,要從"寫打開"文件中讀取一個字符時,會發生錯誤而返回一個 EOF。
顯示指定文件的內容:
3.2 寫一個字符到文件中去
3.2.1 函數原型
3.2.2 功能說明
把 ch中的字符寫入由 fp 指出的文件中去。
3.2.3 參數說明
ch:是一個整型變量,內存要寫到文件中的字符(C 語言中整型量和字符量可以通用)。fp:這是個文件指針,指出要在其中寫入字符的文件。
3.2.4 返回值
正常返回: 要寫入字符的代碼。
非正常返回:返回 EOF。例如,要往"讀打開"文件中寫一個字符時,會發生錯誤而返回一個EOF。
將一個文件的內容複製到另一個文件中去:
按十進位和字符顯示文件代碼,若遇不可示字符就用井號"#"字符代替之。
3.3 從文件中讀取一個字符串
3.3.1 函數原型
3.3.2 功能說明
從由 fp 指出的文件中讀取 n-1 個字符,並把它們存放到由 str 指出的字符數組中去,最後加上一個字符串結束符 '\0'。
3.3.3 參數說明
str:接收字符串的內存地址,可以是數組名,也可以是指針。
n: 指出要讀取字符的個數。
fp:這是個文件指針,指出要從中讀取字符的文件。
3.3.4 返回值
正常返回:返回字符串的內存首地址,即 str 的值。
非正常返回:返回一個 NULL 值,此時應當用 feof() 或 ferror() 函數來判別是讀取到了文件尾,還是發生了錯誤。例如,要從"寫打開"文件中讀取字符串,將發生錯誤而返回一個 NULL 值。
3.4 寫一個字符串到文件中去
3.4.1函數原型
3.4.2 功能說明
把由 str 指出的字符串寫入到 fp 所指的文件中去。
3.4.3 參數說明
str:指出要寫到文件中去的字符串。fp:這是個文件指針,指出字符串要寫入其中的文件。
3.4.4 返回值
正常返回: 寫入文件的字符個數,即字符串的長度。
非正常返回:返回一個 NULL 值,此時應當用 feof() 或 ferror( )函數來判別是讀取到了文件尾,還是發生了錯誤。例如,要往一個"讀打開" 文件中寫字符串時,會發生錯誤而返回一個NULL值。
將一個文件的內容附加到另一個文件中去。
3.5 往文件中寫格式化數據
3.5.1 函數原型
3.5.2 功能說明
將變量表列(arg_list)中的數據,按照 format 指出的格式,寫入由 fp 指定的文件。fprintf() 函數與 printf() 函數的功能相同,只是 printf() 函數是將數據寫入屏幕文件(stdout)。
3.5.3 參數說明
fp:這是個文件指針,指出要將數據寫入的文件。
format:這是個指向字符串的字符指針,字符串中含有要寫出數據的格式,所以該字符串成為格式串。格式串描述的規則與 printf() 函數中的格式串相同。
arg_list:是要寫入文件的變量表列,各變量之間用逗號分隔。
3.6 以二進位形式讀取文件中的數據
3.6.1 函數原型
3.6.2 功能說明
從由 fp 指定的文件中,按二進位形式將 個數據讀到由 buffer 指出的數據區中。
3.6.3 參數說明
buffer:這是一個 void 型指針,指出要將讀入數據存放在其中的存儲區首地址。sife:指出一個數據塊的字節數,即一個數據塊的大小尺寸。
count:指出一次讀入多少個數據塊(sife)。
fp:這是個文件指針,指出要從其中讀出數據的文件。
3.6.4 返回值
正常返回:實際讀取數據塊的個數,即 count。
異常返回:如果文件中剩下的數據塊個數少於參數中 count 指出的個數,或者發生了錯誤,返回 0 值。此時可以用feof() 和 ferror() 來判定到底出現了什麼情況。
3.7 以二進位形式寫數據到文件中去
3.7.1 函數原型
3.7.2 功能說明
按二進位形式,將由 buffer 指定的數據緩衝區內的 個數據寫入由 fp 指定的文件中去。
3.7.3 參數說明
buffer:這是一個 void型指針,指出要將其中數據輸出到文件的緩衝區首地址。
sife:指出一個數據塊的字節數,即一個數據塊的大小尺寸。
count:一次輸出多少個數據塊(sife)。
fp:這是個文件指針,指出要從其中讀出數據的文件。
3.7.4 返回值
正常返回:實際輸出數據塊的個數,即 count。
異常返回:返回0值,表示輸出結束或發生了錯誤。
3.8 以二進位形式讀取一個整數
3.8.1 函數原型
3.8.2 功能說明
從由 fp 指定的文件中,以二進位形式讀取一個整數。
3.8.3 參數說明
fp:是文件指針。
3.8.4 返回值
正常返回:所讀取整數的值。
異常返回:返回 EOF,即 -1。由於讀取的整數值有可能是 -1,所以必須用 feof() 或 ferror() 來判斷是到了文件結束,還是出現了一個出錯。
3.9 以二進位形式存貯一個整數
3.9.1 函數原型
3.9.2 功能說明
以二進位形式把由變量 n 指出的整數值存放到由 fp 指定的文件中。
3.9.3 參數說明
n:要存入文件的整數。
fp:是文件指針。
3.9.4 返回值
正常返回:所輸出的整數值。
異常返回:返回 EOF,即 -1。由於輸出的整數值有可能是 -1,所以必須用 feof() 或 ferror() 來判斷是到了文件結束,還是出現了一個出錯。
4 文件狀態檢查
4.1 文件結束4.1.1 函數原型
4.1.2 功能說明
該函數用來判斷文件是否結束。
4.1.3 參數說明
fp:文件指針。
4.1.4 返回值
0:假值,表示文件未結束。
1:真值,表示文件結束。
4.2 文件讀/寫出錯
4.2.1 函數原型
4.2.2 功能說明
檢查由 fp 指定的文件在讀寫時是否出錯。
4.2.3 參數說明
fp:文件指針。
4.2.4 返回值
0:假值,表示無錯誤。
1:真值,表示出錯。
4.3 清除文件錯誤標誌
4.3.1 函數原型
4.3.2 功能說明
清除由 fp 指定文件的錯誤標誌。
4.3.3 參數說明
fp:文件指針。
4.3.4 返回值
無。
4.4 了解文件指針的當前位置
4.4.1 函數原型
4.4.2 功能說明
取得由 fp 指定文件的當前讀/寫位置,該位置值用相對於文件開頭的位移量來表示。
4.4.3參數說明
fp:文件指針。
4.4.4 返回值
正常返回:位移量(這是個長整數)。
異常返回:-1,表示出錯。
5 文件定位
5.1 反繞5.1.1 函數原型
5.1.2 功能說明
使由文件指針 fp 指定的文件的位置指針重新指向文件的開頭位置。
5.1.3 參數說明
fp:文件指針。
5.1.4返回值
無。
5.2 隨機定位
5.2.1 函數原型
5.2.2 功能說明
使文件指針 fp 移到基於 base 的相對位置 offset 處。
5.2.3 參數說明
fp:文件指針。
offset:相對 base 的字節位移量。這是個長整數,用以支持大於 64KB 的文件。
base:文件位置指針移動的基準位置,是計算文件位置指針位移的基點。ANSI C 定義了 base 的可能取值,以及這些取值的符號常量。
5.2.4 返回值
正常返回:當前指針位置。
異常返回:-1,表示定位操作出錯。
5.3 關於exit()函數
5.3.1 函數原型
5.3.2 功能說明
exit() 函數使程序立即終止執行,同時將緩衝區中剩餘的數據輸出並關閉所有已經打開的文件。
5.3.3 參數說明
status:為 0 值表示程序正常終止,為非 0 值表示一個定義錯誤。
5.3.4 返回值
無。
5.4 關於feof()函數
5.4.1 函數原型
5.4.2 功能說明
在文本文件(ASCII 文件)中可以用值為 -1 的符號常量 EOF 來作為文件的結束符。但是在二進位文件中 -1 往往可能是一個有意義的數據,因此不能用它 來作為文件的結束標誌。為了能有效判別文件是否結束,ANSI C 提供了標準函數 feof(),用來識別文件是否結束。
5.4.3 參數說明
fp:文件指針。
5.4.4 返回值
返回為非 0 值:已到文件尾。
返回為 0 值:表示還未到文件尾。