在linux中我們知道一切皆文件合是,那么在c語言中文件操作有哪些呢火窒,我們來看一下甚垦。
1.新建文件
定義文件類型指針變量的一般形式是:
FILE *指針變量
例如:FILE *fp1 *fp2
在進行文件操作以前,我們需要先創(chuàng)建一個文件释液,這時候需要調(diào)用到fopen()函數(shù)钧排,fopen()的調(diào)用格式是: fopen(文件名, 文件的使用方式)
例如:
FILE *fp
fp = fopen("file_a", "r")
在c語言中常見的文件使用方式有:
"r" : 以只讀方式打開均澳,如果文件不存在恨溜,則報錯
"rb" : 以二進制只讀方式打開一個文件
"w" : 以寫方式打開一個文件,如果文件不存在找前,則新建一個文件糟袁,如果文件存在,則會清空文件內(nèi)容躺盛,重新寫入
"wb" : 以二進制寫方式打開一個文件
"a" : 以追加模式打開一個文件项戴,新內(nèi)容寫入文件尾,不會清空原文件
當(dāng)文件新建以及操作結(jié)束以后槽惫,要關(guān)閉文件周叮,這時候要調(diào)用fclose()函數(shù)。
2 輸入和輸出
在成功的打開文件以后界斜,接下來的事情就是輸入和輸出操作仿耽,最簡單的就是調(diào)用getc()和putc()函數(shù)來實現(xiàn)字符的輸入和輸出
2.1字符的輸入和輸出
putc()的調(diào)用形式是:putc(ch, fp)
這里的ch是待輸入的字符,可以是一個常量各薇,也可以是一個變量项贺, fp是文件指針君躺,putc的功能是將ch寫入到文件fp中去。
getc的調(diào)用形式是 ch = getc(pf)
這里的pf是文件指針开缎,函數(shù)的功能是從pf指定的文件中讀入一個字符串棕叫,并將它作為返回值賦值給ch。
判斷文件是否結(jié)束feof(),文件結(jié)束返回1奕删,沒有結(jié)束返回0
2.2 字符串的輸入和輸出
fscanf()函數(shù)是從文件中按格式輸入俺泣,調(diào)用形式是fscnf(文件指針, 格式控制符完残, 輸入項表)
例如: fscnf(fp, "%d%d", &a, &b)
fprintf()函數(shù)將內(nèi)存中的數(shù)據(jù)轉(zhuǎn)化成相應(yīng)的字符伏钠,然后寫入文件中,調(diào)用形式是fprintf(文件指針坏怪, 格式控制符贝润, 輸出項表)
例如: fprintf(fp, "%d%d", x, y)
2.3 fgets()函數(shù)和fputs() 函數(shù)
fgets()函數(shù)是從文件中讀取字符串绊茧,調(diào)用格式是fgets(str, n, fp), 其中str是存放字符串的起始位置铝宵,n 是一個int型的變量,函數(shù)的功能是從fp制定的文件中讀入n-1個字符串放入str為起始地址的空間中华畏。
fputs()函數(shù)是把字符串輸出到文件中鹏秋,調(diào)用格式是fputs(str, fp),此處的str可以是字符串常量,指向字符串的指針或者是存放字符串的字符數(shù)組等亡笑。
2.4 fread和fwrite函數(shù)
fread()和fwrite()函數(shù)是分別用來讀寫二進制文件的侣夷,他們的調(diào)用格式是
fread(buffer,size,count,fp)
fwrite(buffer,size,count,fp)
其中buffer是數(shù)據(jù)塊的指針,size是指每個數(shù)據(jù)塊的字節(jié)數(shù)仑乌,count用來指定每次讀寫一次百拓,輸入或者輸出數(shù)據(jù)塊的個數(shù)
例如:
struct st
{ char nums[8];
float mk[5];
pers[30];
}
for (i = 0; i< 30; i++ )
fwrite( &pers[i], sizeof( struct st ), 1, fp) //輸出到fp中去
i = 0;
fread( &pers[i], sizeos( struct st ), 1, fp);
while (! feof( fp))
{ i++;
fread( &pers[i], sizeos( struct st ), 1, fp); //將數(shù)據(jù)讀入到pers數(shù)組中去
}
2.5 文件定位函數(shù)
2.5.1 fseek()函數(shù)
fseek()函數(shù)是用來移動文件位置指針到指定的位置上,接著讀寫操作晰甚,函數(shù)調(diào)用格式是fseek(pf, sffset,origin); pf是指文件指針衙传,offset是以字節(jié)為單位的位移量,為長整形厕九,origin是起始點
B標(biāo)識符 | 數(shù)字 | 代表的起始點 |
---|---|---|
SEEK_SET | 0 | 文件開始 |
SEEK_END | 2 | 文件末尾 |
SEEK_CUR | 1 | 文件當(dāng)前位置 |
2.5.2 ftell()函數(shù)
ftell()函數(shù)是用來獲得當(dāng)前位置指針的位置蓖捶,調(diào)用格式是:
long t;
t = ftell(pf)