C語言文件操作的方法有很多,函數(shù)也有很多你知道哪些呢?下面是小編為大家?guī)淼腃語言文件操作的方法,歡迎閱讀。
文件的打開與關(guān)閉
首先要定義一個(gè)文件指針類型,格式為 FILE *文件指針名; ;
FILE *fp; //fp就是定義的文件指針
●打開文件fopen()函數(shù),格式: fp = fopen("文件名", "打開方式");
fp = fopen("c:myfile", "r"); //打開方式下文會(huì)講到
文件名中不允許直接使用路徑描述符 "",必須用轉(zhuǎn)義字符的形式 ""。"" 中第一個(gè) "" 是轉(zhuǎn)義字符,第二個(gè)表示路徑描述符。
●關(guān)閉文件fcolse()函數(shù),格式: fclose(文件指針);
fclose(fp);
功能:正常完成關(guān)閉文件操作時(shí)fclose返回0,否則返回EOF(值為-1),表示有錯(cuò)誤發(fā)生。
●打開文件的方式:
共有12種,由r(read), w(write), a(append), b(binary), +(read/write)五個(gè)字符組合而成。
"r", "w", "a", "r+", "w+", "a+" :這六種打開文本文件
"rb", "wb", "ab", "rb+", "wb+", "ab+" :這六種打開二進(jìn)制文件
"r"打開一個(gè)文本文件,可以讀取文件"w"打開一個(gè)文本文件,可以寫入文件,先將文件的長度截為0。如果該文件不存在則先創(chuàng)建"a"打開一個(gè)文本文件,可以寫入文件,向已有文件的尾部追加內(nèi)容,如果該文件不存在則先創(chuàng)建"r+"打開一個(gè)文本文件,可以進(jìn)行更新(讀取和寫入),也即可以讀取和寫入文件"w+"打開一個(gè)文本文件,可以進(jìn)行更新(讀取和寫入),如果該文件存在則首先將其長度截為0,如果該文件不存在則先創(chuàng)建"a+"打開一個(gè)文本文件,可以進(jìn)行更新(讀取和寫入),向已有文件的尾部追加內(nèi)容,如果該文件不存在則先創(chuàng)建;可以讀取整個(gè)文件,但寫入時(shí)只能追加內(nèi)容。"rb", "wb", "ab", "rb+", "wb+", "ab+", "r+b", "w+b", "a+b"與前面的模式相似,只是使用二進(jìn)制而非文本模式打開文件注意:如果用"w"模式打開任意一個(gè)文件,文件內(nèi)容將刪除,以便程序以一個(gè)空文件開始操作。
●文件結(jié)束的判定feof()函數(shù),格式: feof(文件指針)
這里舉一個(gè)例子幫助理解:
while(!feof(fp)) //我們已在文件的末尾加上結(jié)束標(biāo)志-1
{ c = fgetc(fp);
print("當(dāng)?shù)轿募矔r(shí),此段文字不顯示");
}
//此段程序的含義是:當(dāng)為!feof(fp)為1,從當(dāng)前位置讀入一個(gè)字節(jié)的數(shù)據(jù)賦給字符型變量c,指當(dāng)遇到文件結(jié)束標(biāo)志時(shí),feof(fp)的值為1,feof(fp)為0,循環(huán)結(jié)束
feof()函數(shù)功能:測(cè)試文件指針?biāo)赶虻奈腻\啊內(nèi)部讀寫位置指針是否到達(dá)文件尾。當(dāng)文件結(jié)束時(shí)返回1,否則返回0。
文件的讀寫
1.字符,字符串的讀寫
寫字符函數(shù)fputc,功能:把一個(gè)字符寫入此盤文件中,若輸出成功,則返回輸出的字符,否則返回EOF。格式:
fputc(ch, fp); //將字符ch的值輸出到fp所指向的文件中
ch:要輸出的字符,可以是字符常量,也可以是字符變量。
讀字符函數(shù)fgetc,功能:從指定文件讀入一個(gè)字符,該文件必須是以讀或讀寫方式打開的,若讀取成功返回讀取的字符,否則返回EOF。格式:
ch = fgetc(fp); //讀取成功返回字符賦值給ch
寫字符串函數(shù)fputs,格式: fputs("字符串", 文件指針); 功能:向指定的文件寫入一串字符,寫入成功返回0,否則返回非0值。
fputs("Welcome to my blog", fp);
注意:fputs函數(shù)將寫入文件的字符串中的空字符去掉,ptus函數(shù)將空字符換成換行字符輸出。
讀字符串函數(shù),格式: fgets(字符串, n, fp); 功能:從fp指向的文件讀入n-1個(gè)字符存放第一個(gè)參數(shù)中,如果遇到換行符或EOF,則結(jié)束。
fgets(str, n, fp); //str 為字符數(shù)組。從fp指向的文件讀入n-1個(gè)字符存放到str數(shù)組中
注意:讀入字符串后在最后加一個(gè) '' 字符,fgets函數(shù)返回的返回值為字符串的首地址。
2.數(shù)據(jù)塊的讀寫
數(shù)據(jù)塊寫文件函數(shù)fwrite(),格式:
fwrite(buffer, size, count, fp);
buffer:是一個(gè)指針,用來指出帶輸出數(shù)據(jù)的地址。
size:每次要寫的字節(jié)數(shù)
count:寫入多少個(gè)size大小的數(shù)據(jù)項(xiàng)
注意:完成寫操作(fwrite())后必須關(guān)閉文件(fclose())
數(shù)據(jù)塊的讀文件函數(shù)fread(),格式:
fread(buffer, size, count, fp);
count:讀入多少個(gè)size大小的數(shù)據(jù)項(xiàng)
3.格式化讀/寫文件函數(shù)
讀文件fprintf(),格式: fprintf(文件指針,"格式控制",輸出列表);
fprintf(fp,"%d, %d",a, b); //將a,b寫入fp指向的文件中
注意:fprintf()函數(shù)總是將輸出項(xiàng)在內(nèi)存中的表示形式按指定的格式轉(zhuǎn)換成字符串形式,再寫入到指定的文件中。
寫文件fscanf(),格式: fscanf(文件指針,"格式控制",地址列表);
fprintf(fp,"%d, %d",&a, &b); //將fp指向的文件中的數(shù)據(jù)讀出并存放于a,b
注意:fscanf()函數(shù)從文件中讀出的數(shù)據(jù)一定是按字符串形式(文本形式)存在的。
文件定位
●rewind()函數(shù),格式: rewind(文件指針); 功能:使文件指針的讀寫位置重新返回到文件的開頭。
rewind(fp);
●fseek()函數(shù),格式: fseek(文件指針, 位移量w, 起始點(diǎn)s); 功能:使文件指針移到距起始點(diǎn)偏移w個(gè)字節(jié)處。
fseek(fp, 2, 0); //使文件指針移到距起始點(diǎn)0偏移2個(gè)字節(jié)數(shù)
w:當(dāng)w為正數(shù)時(shí)表示向文件尾方向移動(dòng),為負(fù)數(shù)時(shí)表示向文件頭移動(dòng),為0表示不移動(dòng)。 s:可以為0,1,2;s=0表示文件頭,s=0表示當(dāng)前位置,s=0表示文件末尾。 ●ftell()函數(shù),格式: ftell(文件指針); 功能:得到流式文件中的當(dāng)前位置,用相對(duì)與文件開頭的位移量來表示。若ftell()函數(shù)返回-1L表示出錯(cuò)。
i = ftell(fp); //存放當(dāng)前位置給變量i
if(i == -1L)
printf("error"); //若調(diào)用的函數(shù)出錯(cuò)(如不存在此文件),則輸出ERROR
文件的檢測(cè)
常用的文件檢測(cè)函數(shù)有兩個(gè) ferror()和clearerr() ferror()函數(shù),功能:若ferror()函數(shù)的返回值為0,則表示未出錯(cuò),非0表示出錯(cuò)。格式:
ferror(fp)
clearerr()函數(shù),功能:使文件錯(cuò)誤標(biāo)志和文件結(jié)束標(biāo)志置為0。格式:
clearerr(fp)
1.《c語言文件操作 C語言文件操作的方法》援引自互聯(lián)網(wǎng),旨在傳遞更多網(wǎng)絡(luò)信息知識(shí),僅代表作者本人觀點(diǎn),與本網(wǎng)站無關(guān),侵刪請(qǐng)聯(lián)系頁腳下方聯(lián)系方式。
2.《c語言文件操作 C語言文件操作的方法》僅供讀者參考,本網(wǎng)站未對(duì)該內(nèi)容進(jìn)行證實(shí),對(duì)其原創(chuàng)性、真實(shí)性、完整性、及時(shí)性不作任何保證。
3.文章轉(zhuǎn)載時(shí)請(qǐng)保留本站內(nèi)容來源地址,http://f99ss.com/jiaoyu/76754.html