目錄
一. 文件介紹
1.文件的分類
2.關于數(shù)據(jù)文件
3.文件名
二.引言
三. C程序中文件的打開和關閉
1.文件信息區(qū)
2.文件打開和關閉函數(shù)
3.實現(xiàn)文件的打開與關閉
四.文件的順序讀寫
1.文件讀取示例:
2.文件的寫入示例:
3.文件名數(shù)據(jù)文件的內(nèi)容不是程序,而是程序運行時讀寫的數(shù)據(jù),比如程序運行需要從中讀取數(shù)據(jù),或者輸出內(nèi)容到其中.
一個文件要有唯一的文件標識(為了方便,我們就將文件標識稱為文件名),以便用戶識別和引用。
文件名包含3個部分 :文件路徑+文件名主干+文件后綴
學習文件操作之前,我們所編寫的程序都是在與計算機的動態(tài)內(nèi)存(比如鍵盤輸入緩存區(qū),輸出終端等)進行數(shù)據(jù)交換,程序本身的運行也是在動態(tài)內(nèi)存中進行的,所以程序關閉后,所有的數(shù)據(jù)都會被清理。若想要讓程序所處理的數(shù)據(jù)得到保存并可以在下次運行程序時直接將相關數(shù)據(jù)導入到程序中,我們就必須讓程序?qū)崿F(xiàn)文件操作,通過文件操作,程序便可以和計算機硬盤中的數(shù)據(jù)文件進行數(shù)據(jù)交換,存儲在硬盤數(shù)據(jù)文件中的數(shù)據(jù)可以持久地保存并隨時可以被取用。?
輸入輸出流是抽象的概念,是開發(fā)人員為了編程人員使用方便統(tǒng)一封裝起來的過程,其具體的實現(xiàn)細節(jié)無須我們關心。?
三. C程序中文件的打開和關閉 1.文件信息區(qū)C語言程序,只要運行起來,就默認打開了三個流:
stdin--標準輸入流--鍵盤
stdout--標準輸出流--屏幕
stderr--標準錯誤流--用于輸出警告信息
每個被使用的文件都在內(nèi)存中開辟了一個相應的文件信息區(qū),用來存放文件的相關信息(如文件的名字,文件狀態(tài)及文件當前的位置等)。這些信息是保存在一個結(jié)構體變量中的。該結(jié)構體類型是有系統(tǒng)聲明的,取名FILE。
在VS2013編譯環(huán)境中該類結(jié)構體定義如下:
struct _iobuf{
? ? ? ? ? ? ? ? char *_ptr;
? ? ? ? ? ? ? ? int? ? ? _cnt;
? ? ? ? ? ? ? ? char *_base;
? ? ? ? ? ? ? ? int? ? ? _flag;
? ? ? ? ? ? ? ? int? ? ? _file;
? ? ? ? ? ? ? ? int? ? ? _charbuf;
? ? ? ? ? ? ? ? int? ? ? _bufsize
? ? ? ? ? ? ? ? char *_tmpfname;
? ? ? ? ? ? ? ? };
typedef struct _iobuf FILE;
不同的編譯器FILE類型的包含的內(nèi)容不完全相同,但是大同小異。?
C程序調(diào)用文件打開函數(shù)時,系統(tǒng)會根據(jù)文件的情況自動在內(nèi)存中創(chuàng)建用于存儲該文件各類信息的FILE結(jié)構體變量,這種結(jié)構體變量就是文件信息區(qū)。創(chuàng)建的過程函數(shù)調(diào)用者無須關心。
2.文件打開和關閉函數(shù)通過文件信息區(qū)中的信息就能訪問該文件(訪問操作也是通過調(diào)用庫函數(shù)實現(xiàn),因此具體細節(jié)也無須使用者關心)。
文件在讀寫之前應該先打開文件,在使用結(jié)束之后應該關閉文件。
文件的打開和關閉都是通過調(diào)用庫函數(shù)實現(xiàn)的。
文件打開函數(shù):? ?FILE? * fopen (const char * filename , const char * mode);
FILE * 是指向文件信息區(qū)的結(jié)構體指針變量;
const char*filename 用于接收完整的文件名(字符串常量的首地址)
const char*mode? ? ? 用于接收文件打開方式(也是用字符串常量表示):
常用打開方式 說明 "r"
以“只讀”方式打開文件。只允許讀取,不允許寫入。文件必須存在,否則打開失敗。 "w" 以“寫入”方式打開文件。如果文件不存在,那么創(chuàng)建一個新文件;如果文件存在,那么清空文件內(nèi)容(相當于刪除原文件,再創(chuàng)建一個新文件)。 "a" 以“追加”方式打開文件。如果文件不存在,那么創(chuàng)建一個新文件;如果文件存在,那么將寫入的數(shù)據(jù)追加到文件的末尾(文件原有的內(nèi)容保留)。 "r+" 以“讀寫”方式打開文件。既可以讀取也可以寫入,也就是隨意更新文件。文件必須存在,否則打開失敗。 "w+" 以“寫入/更新”方式打開文件,相當于 w
和r+
疊加的效果。既可以讀取也可以寫入,也就是隨意更新文件。如果文件不存在,那么創(chuàng)建一個新文件;如果文件存在,那么清空文件內(nèi)容(相當于刪除原文件,再創(chuàng)建一個新文件)。"a+" 以“追加/更新”方式打開文件,相當于a和r+疊加的效果。既可以讀取也可以寫入,也就是隨意更新文件。如果文件不存在,那么創(chuàng)建一個新文件;如果文件存在,那么將寫入的數(shù)據(jù)追加到文件的末尾(文件原有的內(nèi)容保留)。
文件關閉函數(shù) : int fclose (FILE*stream);
FILE* stream 用于接收指向所要關閉文件的結(jié)構體指針變量
3.實現(xiàn)文件的打開與關閉文件打開函數(shù)調(diào)用者需用一個FILE*指針來維護系統(tǒng)所創(chuàng)建的FILE結(jié)構的變量。
因此需要創(chuàng)建一個FILE*指針變量來接收fopen函數(shù)返回的FILE*指針
示例:(文件名根據(jù)實際情況來寫)
#includeint main ()
{
FILE* ptr =NULL;
if((ptr=fopen("C:\\code\\text.txt","r"))==NULL)
{
perror("fopen");
exit(0);
}
fclose(ptr);
ptr=NULL; //文件關閉后,F(xiàn)ILE結(jié)構體銷毀,指針要置空
return 0;
}
注意將文件名傳入fopen時文件名中的 \ 用另一個\來修飾不然會被解讀為轉(zhuǎn)義字符
perror是一個錯誤警告函數(shù),在這里用于檢驗文件打開是否成功
四.文件的順序讀寫文件會占用系統(tǒng)資源,所以打開后要記得關閉。?
1.文件讀取示例:文件中的數(shù)據(jù)一般是以字符的方式存儲的
fgets函數(shù)--->按行讀取文件:
Get a string from a stream.
char * fgets( char *string, intn, FILE *stream);
該函數(shù)的功能是按行讀取文件,每調(diào)用一次會讀取文件中一行的數(shù)據(jù),第一次調(diào)用讀第一行,第二次調(diào)用讀第二行(以此類推)。
將FILE*所操作的文件中n個字節(jié)的內(nèi)容讀取到程序中的字符數(shù)組string中。
char *string 用于接收字符數(shù)組首元素地址,n表示讀取的字節(jié)數(shù)
#includeint main()
{
FILE* ptrf = NULL;
char arr[40] = { 0 }; 用于接收從文件中讀取的內(nèi)容
if ((ptrf = fopen("D:\\Program Files (x86)\\作業(yè)文檔\\行者視覺組第五次培訓\\行者視覺組第五次培訓\\2.txt", "r")) == NULL)
{
perror("fopen");
return 1;
}
int i = 0;
for (i = 0; i< 6; i++)
{
fgets(arr, 40, ptrf); 讀取文件中6行的內(nèi)容,每讀一次打印一次
printf("%s\n", arr);
} 注意本例中每一次讀取都會覆蓋arr中原有的內(nèi)容
fclose(ptrf);
ptrf = NULL;
return 0;
}
注意文件打開方式用"r".?
fputs函數(shù):
Write a string to a stream.
int fputs( const char *string, FILE *stream);
函數(shù)的功能是將 const char *string 所指向的字符串寫入到FILE*stream所操作的文件中
#includeint main()
{
FILE* ptrf = NULL;
char arr[40] = { 0 };
if ((ptrf = fopen("D:\\Program Files (x86)\\作業(yè)文檔\\行者視覺組第五次培訓\\行者視覺組第五次培訓\\2.txt", "w")) == NULL)
{
perror("fopen");
return 1;
}
int i = 0;
for (i = 0; i< 6; i++)
{
scanf("%s",arr);
fputs(arr,ptrf);
fputs("\n",ptrf);
}
printf("文件寫入成功\n");
fclose(ptrf);
ptrf = NULL;
return 0;
}
注意文件打開方式用 "w"
你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧
分享名稱:學習筆記1:C語言文件操作(一)-創(chuàng)新互聯(lián)
當前鏈接:http://sd-ha.com/article32/dceesc.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供域名注冊、靜態(tài)網(wǎng)站、微信公眾號、電子商務、外貿(mào)網(wǎng)站建設、標簽優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容