C語言基礎 之 文件基礎

文件

文件的基本概念

文件的定義

所謂文件一般是指存儲在外部介質上的數(shù)據(jù)集合。一批數(shù)據(jù)是以文件的形式存放在外部介質的。操作系統(tǒng)是以文件為單位對數(shù)據(jù)進行管理的。
按數(shù)據(jù)的組織方式,數(shù)據(jù)文件可以分為有結構文件無結構文件兩類。

  • ①有結構文件也叫記錄式文件。它以記錄為單位來保存數(shù)據(jù),每個記錄由若干個數(shù)據(jù)項(也稱字段)組成,每個數(shù)據(jù)項都規(guī)定其具有固定的長度。例如, 數(shù)據(jù)庫文件是一種有結構文件。
  • ②無結構文件也叫流式文件。 它以字符流或二進制位流的形式保存數(shù)據(jù),即輸入輸出數(shù)據(jù)時都按“數(shù)據(jù)流"的形式進行處理,整個文件就是一個字符流或二進制位流,記錄與記錄之間、字段與字段之間沒有界限。文件的存取以字符(字節(jié))或二進制位(bit)為單位,輸入輸出的數(shù)據(jù)流的開始和結束只受程序控制而不受物理符號(如回車換行符)的控制。

C語言使用的是流式文件。常見的文本文件二進制文件屬于流式文件。
ANSI C 標準對文件的處理方法是“緩沖文件系統(tǒng)”,系統(tǒng)為每個打開文件在內存中開辟一個緩沖區(qū)。寫文件時(從內存向磁盤輸出數(shù)據(jù)),先送到緩沖區(qū)中,當緩沖區(qū)裝滿后才送到磁盤中去。讀文件時,也經(jīng)過緩沖區(qū)。這樣做是為了提高讀寫效率,因為磁盤訪問更耗時,一次讀寫一塊數(shù)據(jù), 比每次讀寫單個字符更經(jīng)濟。


文件指針

緩沖文件系統(tǒng)中,關鍵的概念是“文件指針”。每個被用的文件都在內存中開辟一個區(qū),用來存放文件的名字、狀態(tài)、位置等有關信息,這些信息是保存在個結構體類型的變量中的。該結構體類型是由系統(tǒng)定義的,取名為FILE。有的C語言版本在stdio.h 文件中有以下類型定義。

typedef struct
{
  int _fd;        //文件號
  int _cleft;     //緩沖區(qū)中剩下的字符
  int _mode;      //文件操作模式
  char *_nextc;   //下一個字符位置
  char *_buff;    //文件緩沖區(qū)位置
}FILE;

有了FILE類型之后,可以用它定義若干個FILE結構體類型的變量,以便存放若干個文件信息。
稱指向FILE結構體類型的變量為文件類型指針,稱為文件指針。定義文件指針的一般形式:
FILE * 指針變量名;
通常把打開文件的FILE結構的首地址賦給文件指針。


文件的操作

在文件操作時,首先要打開文件,獲得對該文件的指針。通過該指針,就可以獲取對文件進行操作所需的信息。將該指針傳遞給相應的庫函數(shù),庫函數(shù)就能通過這個信息,通過操作系統(tǒng)提供的文件系統(tǒng)調用,來完成低級且復雜的硬件操作,如磁盤的讀與。

打開文件

在C語言中,調用庫函數(shù)fopen打開文件。該函數(shù)的調用方式通常為:

FILE *fp;  //fp為指針變量
fp= fopen(文件名,使用文件方式);

說明:
①函數(shù)的兩個參數(shù)“文件名”和“使用文件方式”均為字符串,其中表示文件名的字符串可以包含文件的存儲路徑,否則表示文件存儲在當前目錄下。
②使用文件的方式及其含義如表8-1所示。

IMG_20190310_215145.jpg

IMG_20190310_215122.jpg

例如:

FILE *fp;
fp= fopen("file.txt","r");

其意義是在當前目錄下打開文件file1.txt,只允許進行“讀”操作,并使fp指向file.txt。

FILE *fp;
fp= fopen("D:\\example\\file2.txt","w");    // 兩個反斜線\\中的第一個表示轉義字符

其意義是在example目錄下打開文件file2.txt,只允許進行“寫”操作,并使fp指向file2.txt。

考慮到出錯處理,如果文件不存在,存取權限不夠等,通常應判斷返回的值:

if(fp==NULL)
{
  printf( "Opening file cror!n");
  exit(0);       //使用exit函數(shù)時,必須包含stdlib.h頭文件
}

關閉文件

文件使用完畢,必須將其關閉以免發(fā)生文件數(shù)據(jù)丟失等錯誤。
關閉文件可調用庫函數(shù)fclose來實現(xiàn)。
該函數(shù)的使用格式通常為:
fclose(文件指針);
說明:
將文件指針與文件脫離聯(lián)系。如果成功進行關閉操作時,函數(shù)返回0,否則返回非0。
例如:
flose(fp); //關閉文件指針fp指向的文件

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容