在前幾章介紹的程序中,數據均是從鍵盤輸入的,數據的輸出均送到顯示器顯示。但是,在實際應用中,計算機作為一種先進的數據處理工具,它所麵對的數據僅依賴於鍵盤輸入和顯示輸出等方式是完全不夠的。通常將這些數據記錄在某些存儲介質上,利用這些介質的存儲特性,攜帶數據或長久地保存數據,這種記錄在外部介質上的數據的集合稱為文件。C語言的輸入/輸出函數庫提供了大量的函數,用於完成數據文件的建立、數據的讀寫以及數據的追加等操作。本章將介紹如何使用這些函數完成文件的建立、讀/寫等基本操作。
1.什麼是文件
文件是程序設計中的一個重要概念。所謂文件,一般是指存儲在外部介質上數據的集合。一批文件是以數據的形式存放在外部存儲設備上的,這就要用到磁盤文件。文件是存放在計算機內的一組相關數據。C語言將文件看作是一個字符(字節)序列,即一個一個字符(字節)數據順序組成。
2.文件的分類
在C語言中,文件有多種分類方法:
(1)按其存放的內容可分為程序文件和數據文件。
(2)根據數據的組成可分為ASCII文件和二進製文件。ASCII文件每一個字節存放一個ASCII字符,例如整型常量2145在內存中按int型占2個字節,但是ASCII文件則將2145以“2”、“1”、“4”、“5”四個字符存放,占4個字節。二進製文件把內存中的數據按其在內存中的存儲形式輸出到磁盤上存放,2145按int型以2個字節存放。前者占空間多,需要轉換,後者節省空間和轉換時間,但一個字節不能對應一個字符,不可以直接輸出字符形式。
(3)按文件的邏輯結構分為記錄文件和流式文件。前者由具有一定結構的記錄組成(定長和不定長),後者由一個個字符(字節)數據順序組成。
(4)按存儲介質分為普通文件和設備文件。存儲介質普通文件包括磁盤、磁帶等,設備文件包括非存儲介質(鍵盤、顯示器、打印機等)。
(5)按照對文件的不同處理方式,在C語言中文件可分為緩衝文件和非緩衝文件。
C語言規定文件是一種特殊的結構體類型,該結構體中的成員記錄了處理文件時所需的信息。該結構體已在頭文件“stdio.h”中按下列格式進行了定義,在學習過程中不用管文件的具體定義,隻要會用就行了。用戶可以直接使用“FILE”類型名來定義這個結構體的指針變量,並通過它來處理文件。用“FILE”定義的指針變量通常稱為“文件類型指針”。
文件類型指針定義的一般形式為:
FILE*文件指針名1;
其中,文件指針名是用戶自定義的標識符。
注意:使用“FILE”定義文件指針時,必須在程序的開頭增加編譯預處理命令#include
,因為文件結構體類型是在“stdio.h”中定義的。
在緩衝文件係統中進行文件的操作一般分為三個步驟:打開文件,操作文件,關閉文件。
打開文件:建立用戶程序與文件的聯係。
操作文件:對文件的讀、寫、追加和定位操作。
關閉文件:切斷文件與程序的聯係,將文件緩衝區的內容寫入磁盤,並釋放文件緩衝。
在C語言文件係統中,係統自動設置文件指針,可以利用文件指針函數判斷文件是否結束。文件指針函數是feof。
在文本文件中,數據都是以ASCII代碼存放,由於ASCII的取值範圍為0~255,不會出現-1,因此在文件尾加-1作為文件結束標誌,用函數feof可以測試到文件結束標誌-1。
feof函數的一般調用格式為:feof(文件指針)。
功能:測試文件指針所指向的文件其內部讀寫位置指針是否到達文件尾。
返回值:如果文件結束,則返回值為1,否則為0。