C語言主要通過編寫代碼、編譯等方式實現(xiàn)運行,對于習(xí)慣使用Windows操作系統(tǒng)并通過雙擊鼠標(biāo)等方式操作文件的學(xué)習(xí)者來說,使用編程技術(shù)處理文件顯得較為難以入手,本文主要介紹C語言處理文件的幾個關(guān)鍵技術(shù),通過編寫代碼實現(xiàn)操作文件的目標(biāo),為學(xué)習(xí)者使用C語言代碼操作文件方式方法提供借鑒,促進編程應(yīng)用技術(shù)水平的提升。
【關(guān)鍵詞】C語言 代碼 文件 技術(shù)
本文以文本文件(.txt)為例,具體為:c:\file.txt,將通過介紹關(guān)聯(lián)文件、打開關(guān)閉、讀寫數(shù)據(jù)等C語言操作文件的關(guān)鍵技術(shù)讓C語言學(xué)習(xí)者充分掌握對文件的基本操作。
1 使用結(jié)構(gòu)體指針變量關(guān)聯(lián)文件技術(shù)
要善于利用C語言中的庫函數(shù)讀寫文件,使用庫函數(shù)定義好的結(jié)構(gòu)類型FILE管理對象文件的各種信息。
1.1 了解C語言操作文件方式
圖1是C語言操作文件方式圖,要實現(xiàn)C語言成功操作到磁盤里面的文件,必須通過文件名、使用方式和文件類型指針,也是我們用C語言操作文件的最主要實參。
1.2 了解結(jié)構(gòu)體FILE
在很多的C語言程序設(shè)計的教材中都提到讓學(xué)習(xí)者不必關(guān)心結(jié)構(gòu)體FILE內(nèi)部的細節(jié),只需要直接使用即可,但要學(xué)到位,達到真正領(lǐng)會并實現(xiàn)應(yīng)用的水平,了解FILE內(nèi)部詳細內(nèi)容很有必要,該結(jié)構(gòu)體定義在stdio.h頭文件中,代碼內(nèi)容如下:
Typedef struct {
char *_ptr; //文件輸入的下一個位置
int _cnt; //當(dāng)前緩沖區(qū)的相對位置
char*_base; //指文件的起始位置
int _flag; //文件標(biāo)志
int _file; //文件的有效性驗證
int _charbuf; //檢查緩沖區(qū)狀況,如果無緩沖區(qū)則不讀取
char *_tmpfname; //臨時文件名
int _fd;//文件號
int _cleft;//緩沖區(qū)中剩下的字符數(shù)
int _mode;//文件的操作方式
char *_next;//文件當(dāng)前讀寫位置
chanr *_buff;//文件緩沖區(qū)位置
}; FILE;
其中文件號、操作方式、文件當(dāng)前位置是文件結(jié)構(gòu)體中最為核心內(nèi)容,理解結(jié)構(gòu)體中的具體內(nèi)容有助于如何更好地靈活讀寫文件。
1.3 定義文件指針
要操作一個文件,必須明確該文件在磁盤中的具體位置和文件名,實際是要確定文件所在磁盤物理地址,定義好文件指針,為之后正常讀寫文件打下基礎(chǔ),具體在代碼中的表達方式為:“FILE *wj;”。其中“wj”是類型為FILE的文件指針變量,“*”一定不能省略,以后就用“wj”來代替文件的具體路徑和具體文件,也就是說“wj”就是文件的具體代號,包括文件的具體路徑、文件名等都由它了全權(quán)代表。
1.4 調(diào)用庫函數(shù)關(guān)聯(lián)文件
調(diào)用庫函數(shù)fopen,實現(xiàn)將文件指針wj與要操作的具體文件建立關(guān)聯(lián),具體實現(xiàn)代碼為:wj=fopen(“c:\\file.txt”,“r”);其中fopen函數(shù)需要兩個參數(shù),第一個參數(shù)是包含有具體路徑的文件名,第二個參數(shù)“r”是表示打開文件方式,這里表示是只讀取內(nèi)容。
Fopen函數(shù)的返回值是一個FILE類型的地址,wj與文件關(guān)聯(lián),實際就是將fopen返回的這個地址保存到指針變量wj中,但不只是地址,還有其他相關(guān)文件的重要信息,這也是為什么使用結(jié)構(gòu)體的緣故。
2 調(diào)用庫函數(shù)打開和關(guān)閉文件技術(shù)
通過fopen庫函數(shù)把C語言與磁盤中的文件進行了關(guān)聯(lián),接下來就可以進行后續(xù)的讀寫操作。
2.1 文件的打開
首先要對文件的打開成功與否進行判斷,只有文件打開成功才能進行后續(xù)的讀寫操作,若打開失敗應(yīng)給出一些提示,不能再讀寫文件,這是很有必要的,可能會存在由于磁盤已滿、文件損壞、文件夾不存在等原因而導(dǎo)致打開文件失敗。在系統(tǒng)中,文件打開失敗時fopen的返回值是0或NULL(即返回空指針),如文件打開成功,fopen的返回值為非0,可以通過以下代碼實現(xiàn):
FILE *wj;
Wj=fopen(“c:\\file.txt”,“r”);
If(wj==NULL)
Printf(“文件打開失敗!”);
Else
/*讀寫文件*/
把文件指針wj與具體文件file.txt關(guān)聯(lián)起來,如果fopen函數(shù)的返回值為非0,就可以判斷該文件已成功被打開。
2.2 文件的關(guān)閉
文件指針與文件關(guān)聯(lián),是為了指針代表文件,以便后續(xù)的讀寫操作,需要占用系統(tǒng)資源,不能長期占用,否則可能導(dǎo)致文件信息丟失等情況,因此在程序運行結(jié)束之前,必須讓指針和文件解除關(guān)系以釋放系統(tǒng)資源,這個過程稱為關(guān)閉文件,C語言通過使用fclose庫函數(shù)實現(xiàn)文件的關(guān)閉,具體代碼為:“fclose(wj);”參數(shù)是文件指針變量名。
解除關(guān)聯(lián)后,文件指針wj不再代表文件file.txt,不能再通過wj讀寫該文件,在程序運行過程中,隨時可以用fclose庫函數(shù)關(guān)閉文件,即解除指針與文件的關(guān)聯(lián)關(guān)系,此時可以使用wj關(guān)聯(lián)其他文件。
3 讀寫文件數(shù)據(jù)信息技術(shù)
3.1 用庫函數(shù)fscanf讀取文件數(shù)據(jù)代碼
文件file.txt中有2列數(shù)據(jù),共5行,第1列為序號(int型),第2列為分數(shù)(float型),讀取數(shù)據(jù)代碼如下:
#include
Main()
{FILE *wj;int a,b;float c;
Wj=fopen(“c:\\file.txt”,“r”);
For(a=1;a<6;a++)
{fscanf(wj,“%d %f”,&b,&c);}
Fclose(wj);}
通過編譯,界面會顯示file.txt中的數(shù)據(jù),共5行2列,第1列為序號,第2列為分數(shù)。
3.2 用庫函數(shù)fprintf寫入文件信息代碼
#include
Main()
{FILE *wj;
Wj=fopen(“c:\\file.txt”,“w”);
Fprintf(wj,“good!”);
Fclose(wj);}
通過編譯,位于C盤下file.txt文件被寫入“good!”文本。
通過以上內(nèi)容可以總結(jié)出C語言對文件操作流程為:定義文件指針變量、打開文件、讀寫文件和關(guān)閉文件,分別要用到結(jié)構(gòu)類型FILE、庫函數(shù)fopen和庫函數(shù)fclose,在讀寫是還要使用到fscanf和fprintf庫函數(shù),為C語言學(xué)習(xí)者提供借鑒。
參考文獻
[1]百度百科.
[2]譚浩強.C程序設(shè)計[M].北京清華大學(xué)出版社,1999.
[3]張蕾.基于項目化教學(xué)的“C語言程序設(shè)計”課程改革[J].教改縱橫,2013(02):17.
[4]肖捷.C語言程序設(shè)計實踐教學(xué)方案研究與設(shè)計[J].東莞理工學(xué)院學(xué)報,2012.19(05).
作者簡介
羅慧蘭(1981-),女,廣東省廣州市人。軟件工程碩士,講師。研究方向為計算機軟件、計算機網(wǎng)絡(luò)、電子商務(wù)。
作者單位
廣東生態(tài)工程職業(yè)學(xué)院 廣東省廣州市 510520