https://www.toutiao.com/a6611494147658351118/
我們要想對(duì)文件進(jìn)行讀取或?qū)懭?,需要有一個(gè)能夠訪問(wèn)到該文件的文件指針(FILE類型),這樣我們就能通過(guò)文件指針對(duì)文件進(jìn)行操作啦!
FILE *fp; //聲明文件指針
fp = fopen(文件路徑, 訪問(wèn)模式);
//指向文件,第一個(gè)參數(shù)為字符串12
關(guān)于訪問(wèn)模式:——只讀:“r”
——只寫(xiě)(覆蓋): “w”
—— 文件末尾追加: “a”
——可讀可寫(xiě): “r+”或“w+”
——二進(jìn)制文件:“b”
——文本文件:“t”
//訪問(wèn)模式可以疊加,例如"rb"代表讀取二進(jìn)制文件
之后我們就可以對(duì)文件進(jìn)行操作啦(如fgetc()函數(shù)(讀?。┖蚮putc()函數(shù)(寫(xiě)入))
——關(guān)于讀取:文件指針指向文件后,通過(guò)fgetc(fp);獲得當(dāng)前指針之后位置的一個(gè)字符,每獲得一個(gè)字符指針就會(huì)自動(dòng)向后移動(dòng)一個(gè)字符(如果到達(dá)文件尾部則會(huì)返回EOF)
——關(guān)于寫(xiě)入:通過(guò)fputc(‘字符’, fp);方式將字符寫(xiě)入到與fp關(guān)聯(lián)的文件中
文件指針不再使用后需斷開(kāi)關(guān)聯(lián),格式為:
fclose(fp);
//若不加此句,程序正常結(jié)束后系統(tǒng)會(huì)自動(dòng)為打開(kāi)的文件調(diào)用fclose1
舉個(gè)例子:
//省略代碼
FILE *p1 = fopen("路徑1", "r");
FILE *p2 = fopen("路徑2", "w");
char c;
while ((c = fgetc(p1)) != EOF) {
//把一個(gè)文件內(nèi)容復(fù)制到另一個(gè)文件
fputc(c, p2);
}
fclose(p1);
fclose(p2);123456789
undefined注意?。。。?/p>
在給文件指針命名時(shí),不能使用 stdin、stdout 和 stderr 這三個(gè)名字,因?yàn)檫@三個(gè)名字是系統(tǒng)內(nèi)置用于標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出、標(biāo)準(zhǔn)錯(cuò)誤的文件指針名
我們可通過(guò) fgetc(stdin); 獲得來(lái)自標(biāo)準(zhǔn)輸入的字符
通過(guò) fputc(ch, stdout); 將 ch 字符輸出到標(biāo)準(zhǔn)輸出
通過(guò) fputc(ch, stderr); 將 ch 字符輸出到標(biāo)準(zhǔn)錯(cuò)誤
除fgetc和fputc外,我們還可以使用fscanf和fprintf函數(shù)
我們可以使用fscanf通過(guò)文件指針讀取:
也可以使用fprintf通過(guò)文件指針寫(xiě)出
fscanf(p1, "%c", &a);
//通過(guò)文件指針p1獲取字符并存儲(chǔ)到a中
fprintf(p2, "%c", a);
//通過(guò)文件指針p2將字符a寫(xiě)入文件中12
這兩個(gè)函數(shù)是不是感覺(jué)有點(diǎn)眼熟?對(duì)!大家熟悉的scanf和printf 和它們長(zhǎng)得很像,那它們之間有關(guān)系嗎?
答案是有的。scanf可以看作是 fscanf的特例
printf可以看作是fprintf 的特例
至于為什么,看下面的代碼:
fscanf(stdin, "%c", &a); //等價(jià)于下一行
scanf("%c", &a);
fprintf(stdout, "%c", a); //等價(jià)于下一行
printf("%c", a);12345
嗯嗯,上面也說(shuō)啦,stdin和stdout的實(shí)質(zhì)也是文件指針,分別代表從控制臺(tái)獲取,輸出到控制臺(tái)。
當(dāng)然啦,stdin和stdout也可以通過(guò)fclose關(guān)掉,大家可以試一下關(guān)掉后還能進(jìn)行scanf和printf嘛~ 趕緊跑路hahaha
喜歡此篇文章或覺(jué)得這篇文章對(duì)你有幫助的讀者可以點(diǎn)播關(guān)注或者轉(zhuǎn)發(fā),私信小編001即可獲得小編自己整理的一份2018最新的C/C++資料和0基礎(chǔ)入門教程,歡迎初學(xué)和進(jìn)階中的小伙伴
聯(lián)系客服