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ū)裝滿后才送到磁盤中去檬贰。讀文件時,也經過緩沖區(qū)翁涤。這樣做是為了提高讀寫效率,因為磁盤訪問更耗時号阿,一次讀寫一塊數(shù)據(jù)鸳粉, 比每次讀寫單個字符更經濟。


文件指針

緩沖文件系統(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)系作者
  • 序言:七十年代末匀泊,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子各聘,更是在濱河造成了極大的恐慌,老刑警劉巖早敬,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件搞监,死亡現(xiàn)場離奇詭異,居然都是意外死亡琐驴,警方通過查閱死者的電腦和手機秤标,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來牢酵,“玉大人衙猪,你說我怎么就攤上這事〉媸停” “怎么了?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵铁追,是天一觀的道長茫船。 經常有香客問我扭屁,道長料滥,這世上最難降的妖魔是什么艾船? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮屿岂,結果婚禮上,老公的妹妹穿的比我還像新娘阻肩。我一直安慰自己运授,他們只是感情好,可當我...
    茶點故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布吁朦。 她就那樣靜靜地躺著,像睡著了一般雄右。 火紅的嫁衣襯著肌膚如雪纺讲。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天,我揣著相機與錄音则涯,去河邊找鬼冲簿。 笑死粟判,一個胖子當著我的面吹牛档礁,可吹牛的內容都是我干的吝沫。 我是一名探鬼主播递礼,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼羹幸,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了将硝?” 一聲冷哼從身側響起屏镊,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎而芥,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蔚出,經...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡骄酗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了睛琳。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片踏烙。...
    茶點故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡讨惩,死狀恐怖辟癌,靈堂內的尸體忽然破棺而出黍少,到底是詐尸還是另有隱情处面,我是刑警寧澤,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布昵济,位于F島的核電站,受9級特大地震影響访忿,放射性物質發(fā)生泄漏。R本人自食惡果不足惜沼溜,卻給世界環(huán)境...
    茶點故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一系草、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧找都,春花似錦、人聲如沸能耻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至透乾,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間乳乌,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工再来, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留磷瘤,地道東北人。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像痹雅,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子摔蓝,可洞房花燭夜當晚...
    茶點故事閱讀 42,834評論 2 345