為什么使用文件?
目前創(chuàng)新互聯(lián)建站已為1000多家的企業(yè)提供了網(wǎng)站建設(shè)、域名、雅安服務(wù)器托管、網(wǎng)站改版維護(hù)、企業(yè)網(wǎng)站設(shè)計(jì)、虎林網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。
使用文件可以將數(shù)據(jù)直接存放在電腦的硬盤上,做到了數(shù)據(jù)的持久化。
什么是文件?
磁盤上的文件就是文件。
但在程序設(shè)計(jì)中,常說的有兩種:程序文件和數(shù)據(jù)文件,這是從從文件功能的角度來分類的。
程序文件:
包括源程序文件(后綴為.c),目標(biāo)文件(Windows環(huán)境后綴為.obj),可執(zhí)行程序(Windows環(huán)境后綴為.exe)。
數(shù)據(jù)文件:
文件的內(nèi)容不一定是程序,而是程序運(yùn)行時(shí)讀寫的數(shù)據(jù),比如程序運(yùn)行需要從中讀取數(shù)據(jù)的文件或輸出內(nèi)容的文件。
把內(nèi)存的數(shù)據(jù)寫入文件叫寫(輸出),將文件的數(shù)據(jù)讀入內(nèi)存叫讀(輸入)。
文件名
每一個(gè)文件都有唯一的文件標(biāo)識(shí)被稱為文件名,其中文件名包含3部分:文件路徑+文件名主干+文件后綴
例如:c:\code\test.txt
文件的打開和關(guān)閉
操作文件:打開文件 ->讀/寫文件 ->關(guān)閉文件
1.文件類型指針(簡(jiǎn)稱文件指針)
每個(gè)被使用的文件都在內(nèi)存中開辟了一個(gè)相應(yīng)的文件信息區(qū),用來存放文件的相關(guān)信息(如文件的名字、文件狀態(tài)以及文件當(dāng)前的位置等)。這些信息是保存在一個(gè)結(jié)構(gòu)體變量中的。該結(jié)構(gòu)體類型具有系統(tǒng)聲明,為FILE。一般通過一個(gè)FILE的指針來維護(hù)這個(gè)FILE結(jié)構(gòu)的變量,以便于使用。
int main()
{
FILE* pf = fopen(const char* filename, const char* mode);
//filename為文件名或文件路徑,mode為文件打開的方式
//當(dāng)添加的為文件路徑時(shí),記得在斜杠前再加一個(gè)斜杠,將斜杠轉(zhuǎn)義
//返回類型為一個(gè)結(jié)構(gòu)體指針
if (pf == NULL)
{
printf("%s\n", strerror(errno));
return 1;
}
//注意文件有可能打開失敗,則返回一個(gè)空指針,我們可以查看打開失敗的原因
fclose(pf);
pf = NULL;
//關(guān)閉文件
return 0;
}
其中文件打開的方式有以下幾種 :
以下是讀字符和寫字符的示例?
int main()
{
FILE* pf = fopen("test.txt","w");
if (pf == NULL)
{
printf("%s\n", strerror(errno));
//perror("fopen");是一樣的效果
return 1;
}
//將字符a寫入文件
fputc("a", pf);//字符寫入函數(shù)
//讀字符
int ch = 0;
//從文件了讀一個(gè)字符
//如果讀取字符失敗,會(huì)返回EOF
while ((ch = fgetc(pf)) != EOF)
{
printf("%c", ch);
}
fclose(pf);
pf = NULL;
return 0;
}
寫或讀一行數(shù)據(jù)與讀寫字符類似,只是采用fputs和fgets。使用fgets時(shí),如讀5個(gè)字符實(shí)際會(huì)只有4個(gè)因?yàn)樽詣?dòng)添加了一個(gè)\0。同理也有fscanf以及fprintf。
注意,使用寫文件時(shí)使用w打開,會(huì)將原文件中的數(shù)據(jù)銷毀,如不想銷毀,應(yīng)使用a,即追加?。
辨析:
scanf/fscanf/sscanf
printf/fprintf/sprintf
其中scanf是針對(duì)標(biāo)準(zhǔn)輸入(即鍵盤)的格式化輸入語句
printf是針對(duì)標(biāo)準(zhǔn)輸出的格式化輸出語句
fscanf是針對(duì)所有輸入流的格式化輸入語句
fprintf是針對(duì)所有輸出流的格式化輸出語句
sscanf是從一個(gè)字符串中轉(zhuǎn)換出一個(gè)格式化的數(shù)據(jù)
sprintf是把一個(gè)格式化的數(shù)據(jù)寫入(轉(zhuǎn)換成)字符串
文件的隨機(jī)讀寫
fseek函數(shù)
第一個(gè)參數(shù)選擇流,第二個(gè)參數(shù)為偏移量,第三個(gè)參數(shù)為起始位置(從哪里開始偏移)。
FILE* pf = fopen("test.txt","r");
if (pf == NULL)
{
printf("%s\n", strerror(errno));
return 1;
}
//文件中已有abcdef
fseek(pf, 2, SEEK_SET);
int ch = fgetc(pf);
printf("%c\n", ch);
//輸出的結(jié)果為c
rewind函數(shù)?
讓文件指針的位置回到文件的起始位置
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
當(dāng)前名稱:C語言—文件操作-創(chuàng)新互聯(lián)
網(wǎng)頁鏈接:http://vcdvsql.cn/article36/cscisg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁設(shè)計(jì)公司、動(dòng)態(tài)網(wǎng)站、搜索引擎優(yōu)化、建站公司、外貿(mào)建站、網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容