文件和注冊(cè)表操作
很多與文件操作相關(guān)的函數(shù)其參數(shù)類(lèi)型都是const char*,本章首先介紹指向常量的指針const char*和指針常量char *const這兩種類(lèi)型的區(qū)別。
12.1char const * 和char * const
1 char const * p;
2 const char * p;
3 char * const p;
這三個(gè)有什么不同?const char * p;和char const * p;在實(shí)現(xiàn)上都是一樣的,定義一個(gè)指向常量的指針,由于指針指向的是一個(gè)常量,常量的值不能改變,但是可以改變指針的指向。char * const p;這是一個(gè)指針常量,也就是指針的指向不能改變,但是可以改變指針指向的值。區(qū)別指針常量和常量指針的關(guān)鍵看const 和* 的位置。
12.2C語(yǔ)言對(duì)文件操作的支持
C語(yǔ)言中,對(duì)文件的操作是利用FILE結(jié)構(gòu)體實(shí)現(xiàn)的。
12.2.1文件的打開(kāi)
MSDN中有一個(gè)fopen函數(shù)
1 FILE *fopen( const char *filename, const char *mode );
其中的第一個(gè)參數(shù)是要打開(kāi)的文件名稱(chēng),第二個(gè)參數(shù)是打開(kāi)的模式。MSDN中對(duì)打開(kāi)文件的模式進(jìn)行了如下的定義。
打開(kāi)一個(gè)文件的實(shí)例代碼如下:
FILE *pFile=fopen("1.txt","w");//該操作返回一個(gè)FILE類(lèi)型的指針
12.2.2文件的寫(xiě)入
1 size_t fwrite( const void *buffer, size_t size, size_t count, FILE *stream );
文件寫(xiě)入有四個(gè)參數(shù),分別表示:要寫(xiě)入的數(shù)據(jù),以字節(jié)為單位的項(xiàng)的大小,寫(xiě)入項(xiàng)的最大數(shù)目,指向FILE類(lèi)型的指針,該參數(shù)可以由fopen函數(shù)獲取到,也就是fopen函數(shù)的返回值。寫(xiě)入文件的實(shí)例代碼如下:
1 fwrite("new buffer",1,strlen("new buffer"),pFile);
由于C語(yǔ)言對(duì)文件操作采用緩存文件系統(tǒng),從內(nèi)存從磁盤(pán)寫(xiě)入的文件首先會(huì)被放到內(nèi)存緩沖區(qū)中,只有當(dāng)內(nèi)存緩沖區(qū)滿(mǎn)了或者當(dāng)寫(xiě)入操作的文件關(guān)閉之 后,才把要寫(xiě)入的數(shù)據(jù)存的磁盤(pán)文件上。如果要在執(zhí)行寫(xiě)操作之后立即將數(shù)據(jù)存放到磁盤(pán)文件上,可以先調(diào)用fflush函數(shù)刷新緩沖區(qū)或者調(diào)用fclose函數(shù)將打開(kāi)的文件關(guān)閉。
12.2.3文件指針的定位
1 int fseek( FILE *stream, long offset, int origin );
該函數(shù)的第三個(gè)參數(shù)有三種默認(rèn)的值,SEEK_CUR,SEEK_END,SEEK_SET,實(shí)際上是三個(gè)宏定義值,在STDIO.h文件中可以看到它們的值分別是1,2,0。分別表示定位到文件的當(dāng)前位置,結(jié)束位置和開(kāi)始位置。
1 fseek(pFile,0,SEEK_SET);
2 fwrite("haha",1,strlen("haha"),pFile);
將指針定位到已經(jīng)打開(kāi)的文件的其實(shí)位置,并寫(xiě)入新的數(shù)據(jù)。完成此操作時(shí)候會(huì)發(fā)現(xiàn)文件中起始位置的四個(gè)字符已經(jīng)被替換掉了。嘗試了下改變文件的打開(kāi)模式,但是都不能實(shí)現(xiàn)a+b的效果。
12.2.3文件的讀取
1 size_t fread( void *buffer, size_t size, size_t count, FILE *stream );
由于C語(yǔ)言中字符串是以""0"符號(hào)結(jié)束的。在顯示字符串的時(shí)候,系統(tǒng)會(huì)尋找""0"字符,因此在寫(xiě)入數(shù)據(jù)的時(shí)候需要在結(jié)尾添加一個(gè)""0",在讀取數(shù)據(jù)的時(shí)候,可以動(dòng)態(tài)創(chuàng)建一個(gè)數(shù)據(jù)長(zhǎng)度+1的字符數(shù)組,然后將最后一個(gè)元素設(shè)置為""0"。
寫(xiě)入文件時(shí)
01 void CFileView::OnFileRead()
02 {
03 // TODO: Add your command handler code here
04 FILE *pFile=fopen("1.txt","w");
05 //fwrite("new buffer",1,strlen("new buffer"),pFile);
06 char buf[22]="www.colsir.com";
07 buf[21]='"0';
08 fwrite(buf,1,22,pFile);
09 fclose(pFile);
10 }
相關(guān)推薦:
2012年計(jì)算機(jī)等考四級(jí)數(shù)據(jù)庫(kù)工程師備考筆記匯總
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |