C_C++程序設(shè)計(jì)教程課件文件_第1頁(yè)
C_C++程序設(shè)計(jì)教程課件文件_第2頁(yè)
C_C++程序設(shè)計(jì)教程課件文件_第3頁(yè)
C_C++程序設(shè)計(jì)教程課件文件_第4頁(yè)
C_C++程序設(shè)計(jì)教程課件文件_第5頁(yè)
已閱讀5頁(yè),還剩40頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、一、文本流和二進(jìn)制流二、流文件三、文件的翻開函數(shù)fopen和關(guān)閉函數(shù)fclose四、格式讀寫fprintf和fscanf函數(shù)五、出錯(cuò)測(cè)試或去除函(feof,ferror,clearerr)第13章 文 件 1一、文本流和二進(jìn)制流 內(nèi)存中的信息會(huì)由于程序運(yùn)行的結(jié)束而消失。程序運(yùn)行的結(jié)果需要另外穩(wěn)定的介質(zhì)加以永久保存,這種可以長(zhǎng)期保留數(shù)據(jù)的存儲(chǔ)設(shè)備稱為磁盤文件。下面幾種是有影響的存儲(chǔ)方式: 1. ANSI C 運(yùn)行庫(kù)緩沖流的輸出輸出操作 2. C 運(yùn)行庫(kù)低級(jí)輸出輸出操作 3. iotream類提供的I/O操作 4. DOS 或WINDOWS API 端口操作 5. Microsoft Founda

2、tion 類庫(kù)的文件操作 2在C/C+中流可分為兩類: 1) 文本流(text stream); 1) 二進(jìn)制流(binary stream) 文本流中的數(shù)據(jù)以字符形式出現(xiàn),文本以行作為結(jié)束。 圖 數(shù)據(jù)的流入流出是一個(gè)相對(duì)概念 流 入 couta 流 入 磁盤 內(nèi)存 緩沖區(qū) 內(nèi)存 數(shù)據(jù)區(qū) 鍵盤 stdin stdout顯示器 stderr 打印機(jī) stdprn3二、流文件 流文件是C運(yùn)行庫(kù)函數(shù)中由FILE結(jié)構(gòu)有效處理的硬件設(shè)備的邏輯描述。在這個(gè)稱為標(biāo)準(zhǔn)文件I/O系統(tǒng)中, 定義了三個(gè)文本流: stdin,stdout和stderr。一般對(duì)如下前3個(gè)標(biāo)準(zhǔn)設(shè)備,系統(tǒng)構(gòu)筑了流文件的索引方式,其相應(yīng)的非

3、緩沖區(qū)的文件代號(hào)一并羅列如下: 硬件設(shè)備 預(yù)定義的流文件或流對(duì)象 設(shè)備代號(hào)或句柄鍵 盤標(biāo)準(zhǔn)輸入 stdin cin 0 顯示器標(biāo)準(zhǔn)輸出 stdout cout 1顯示器標(biāo)準(zhǔn)錯(cuò)誤 stderr cerr 2串行口標(biāo)準(zhǔn)輔助 stdaux 3打印機(jī)標(biāo)準(zhǔn)打印 stdprn clog 4 4 描述流文件的FILE數(shù)據(jù)結(jié)構(gòu)隨編譯器版本的不同而相異,下面的描述摘自微軟VC 6.0 頭文件stdio.h,該結(jié)構(gòu)的具體聲明如下: struct _iobuf char *_ptr; /1索引數(shù)據(jù)流內(nèi)容的位置指針 int _cnt; /2當(dāng)前的定位標(biāo)志數(shù) char *_base; /3緩沖區(qū)基準(zhǔn)位置 int _fl

4、ag; /4文件操作模式標(biāo)記 int _file; /5文件的代號(hào) int _charbuf; /6字符緩沖信息 int _bufsiz; /7緩沖區(qū)大小 char *_tmpfname; /8臨時(shí)文件名;typedef struct _iobuf FILE;5 對(duì)于該結(jié)構(gòu)軟件供給商并未逐一指明其中每一數(shù)據(jù)成員的詳細(xì)含義,標(biāo)準(zhǔn)輸入輸出函數(shù)的用戶不要冒然直接去操作其中的成員,而通過(guò)相應(yīng)的函數(shù)間接進(jìn)行。 三個(gè)預(yù)定義的流文件在vc 6.0的stdio.h中通過(guò)通過(guò)外部說(shuō)明語(yǔ)句和宏: extern FILE _iob ;#define stdin (&_iob0)#define stdout (&_i

5、ob1)#define stderr (&_iob2) 就已經(jīng)在內(nèi)存中構(gòu)建, 因此不對(duì)這三個(gè)標(biāo)準(zhǔn)的I/O設(shè)備進(jìn)行建立和去除工作。但其它的流文件需要程序員調(diào)用相關(guān)的函數(shù),進(jìn)行規(guī)那么的內(nèi)存分配和釋放工作。6三、文件的翻開函數(shù)fopen和關(guān)閉函數(shù)fclose1. 文件的翻開函數(shù)fopen 文件的翻開函數(shù)fopen是為要操作的磁盤文件對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu)分配內(nèi)存的函數(shù),這是一個(gè)構(gòu)建FILE的數(shù)據(jù)結(jié)構(gòu)變量的初始化函數(shù),系統(tǒng)通過(guò)調(diào)用類似malloc的堆內(nèi)存分配函數(shù)完成了FILE型結(jié)構(gòu)變量的內(nèi)存分配。下面是fopen函數(shù)一個(gè)簡(jiǎn)約的函數(shù)原型: FILE * fopen (const char *filename,

6、const char *mode); 函數(shù)返回一個(gè)指向堆空間的FILE *型的流文件指針。不如確切地說(shuō)該函數(shù)在堆空間誕生了一個(gè)FILE型結(jié)構(gòu)變量。7 兩個(gè)const char *型的入口參數(shù)對(duì)上面的結(jié)構(gòu)成員執(zhí)行了局部初始化賦值。第一個(gè)參數(shù)filename是定位磁盤文件路徑的文件名,該文件名通常是雙引號(hào)括起來(lái)的只讀字符串。 在使用含路徑的文件名時(shí),注意“的使用,對(duì)于硬盤中的文件d:mydocu_1ex.cpp 應(yīng)寫成 “d:mydocu_1ex1.cpp 或進(jìn)行如下的初始賦值:const char *filename=d:mydocu_1ex1.cpp; 第二個(gè)以只讀字符串的形式出現(xiàn)的參數(shù)mod

7、e,界定文件訪問(wèn)操作的模式。其有效的取值組合和含義見(jiàn)下一頁(yè) 8mode 含義 r 以read only 方式翻開一個(gè)文本文件,如果 輸入文件不存在或未找到fopen失敗 w 以write only方式翻開一個(gè)文本文件,如果 輸出文件已存在,內(nèi)容將全覆蓋 a 以寫和append方式在文本文件末尾追加,如 果它不存在那么先建立該文件 r+ 以讀或?qū)懙姆绞椒_一個(gè)必須已經(jīng)存在的文 本文件 w+ 以讀或?qū)懙姆绞椒_一個(gè)空文件,如果給定的 文件名存在原來(lái)的內(nèi)容將被沖洗 a+ 以讀/寫和追加方式翻開文件,如果該文件不存 在那么先建立它9 rb 以只讀方式翻開一個(gè)binary輸入文件,如果文件 不存在或未找

8、到fopen失敗 wb 以只寫方式翻開一個(gè)二進(jìn)制輸出文件,如果文件 已存在,內(nèi)容將全覆蓋 ab 以append方式在binary文件末尾追加,如果它 不存在那么先建立該文件 rb+ 以讀或?qū)懙姆绞椒_一個(gè)必須已經(jīng)存在的二進(jìn)制 文件 wb+ 以讀或?qū)懙姆绞椒_一個(gè)空binary文件,如果文 件名存在原來(lái)的內(nèi)容將被銷毀 ab+ 以讀和追加方式翻開二進(jìn)制文件,如果該文件不 存在那么先建立它10 指定文件的缺省操作類型取決于一個(gè)全局變量 _fmode,vc6.0 里在頭文件stdlib.h中聲明為extern int _fmode;,系統(tǒng)設(shè)置的默認(rèn)值是文本方式即: _fmode=O_TEXT=0 x4

9、000 如果從文本方式切換為二進(jìn)制模式,可以在程序中令: _fmode= O_BINARY; 如果在翻開文件發(fā)生錯(cuò)誤,那么fopen都返回NULL即0,其潛在的原因有: a. 以讀模式翻開一個(gè)并不存在的文件 b. 翻開一個(gè)無(wú)權(quán)操作的文件如該文件已標(biāo)明只讀或隱藏屬性試圖寫追加翻開 c. 以追加方式對(duì)文件操作但磁盤空間缺乏112.文件的關(guān)閉函數(shù)fclose 函數(shù)fclose專用于釋放由函數(shù)fopen申請(qǐng)的堆空間,及時(shí)完成緩沖區(qū)數(shù)據(jù)的到位。fclose的函數(shù)原型為: int fclose (FILE * fp);fclose的函數(shù)原型為:int fclose (FILE * fp); 其中入口形參匹

10、配函數(shù)fopen返回的指針值,函數(shù)fclose調(diào)用成功返回?cái)?shù)值0,否那么返回EOF即-1。 該函數(shù)不操作預(yù)定義的流文件stdin,stdout和stderr,它們是指向全局結(jié)構(gòu)變量的指針。這樣函數(shù)調(diào)用: fclose (fp); 就關(guān)閉了先前由fopen函數(shù)翻開的文件指針?biāo)鶎?duì)應(yīng)的堆空間。12四、格式讀寫fprintf和fscanf函數(shù) 1. fprintf輸出函數(shù) fprintf輸出函數(shù)的一般形式為: int fprintf (FILE* pTarget, const char* format, argument_list); int fprintf (流文件的目的地,格式控制串,參量列表);

11、 fprintf函數(shù)格式控制串與printf中的相同。將fprintf 的第一個(gè)形參pTarget取為實(shí)參stdout,其調(diào)用格式相當(dāng)于printf函數(shù)。即 fprintf (stdout,格式控制串,參量列表); 相當(dāng)于: printf (格式控制串,參量列表); 13 在使用fprintf將內(nèi)存數(shù)據(jù)寫到磁盤文件之前,先要指明磁盤文件的目的所在,因此通過(guò)fopen函數(shù)的寫模式獲得目標(biāo)地址。如: FILE *fpWrite= fopen (writeFile , w);如此之后就可以調(diào)用的 fprintf 函數(shù).如: fprintf (fpWrite, format, v_list); fpr

12、intf (流文件目的地, 格式控制串, 變量列表);142. fscanf輸入函數(shù) fscanf函數(shù)的一般形式為: int fscanf (FILE* pSource, const char* format, address_list); int fscanf (流文件的來(lái)源處, 格式控制串, 變量的地址列表; 將fscanf的第一個(gè)形參pSource實(shí)參化為stdin,其調(diào)用格式相當(dāng)于scanf函數(shù)。即: fscanf ( stdin, 格式控制串, 變量地址1, 變量地址2 . 變量地址n);相當(dāng)于: scanf (格式控制串, 變量地址1, 變量地址2 . 變量地址n); 15 在調(diào)用

13、fscanf函數(shù)將磁盤源文件中的數(shù)據(jù)送到變量所占住的內(nèi)存之前,先應(yīng)指明待讀的磁盤文件,因此借助fopen函數(shù)的讀模式得到數(shù)據(jù)源流的地址如: FILE *fpRead= fopen (readFile, r);如此之后就可以調(diào)用輸入函數(shù)fscanf。格式為: fscanf (fpRead, format, address_list);16 例 格式轉(zhuǎn)換處理一個(gè)結(jié)構(gòu)變量.#include typedef struct SData int nLineset; float fAdjust; int nPoint; float fXa; float fYa; float fZa; CData; void

14、 OutputData (const char *filename, const CData &d ) FILE *fp= fopen(filename, w); fprintf (fp,%d,%f,%dn,d.nLineset,d.fAdjust,d.nPoint);/1 fprintf (fp,%f,%f,%fn, d.fXa,d.fYa,d.fZa);/2 fclose (fp); 17void InputData (const char *filename, CData &d ) FILE *fp = fopen (filename, r); fscanf (fp, %d, %f, %

15、d, &d.nLineset, &d. fAdjust, &d.nPoint); fscanf (fp,%f,%f,%f, &d.fXa, &d.fYa, &d.fZa); /2 fclose (fp); 18void main (void) CData s= 1,2,3,4,5,6; OutputData (c:sdata.out, s); CData d; InputData (c:sdata.out, d); OutputData (c:cdata.out, d); 在文件c:cdata.out中輸出結(jié)果為: 1,2.000000,3 4.000000,5.000000,6.000000

16、在文件c:sdata.out中輸出結(jié)果為: 1,2.000000,3 4.000000,5.000000,6.00000019五、出錯(cuò)測(cè)試或去除函(feof,ferror,clearerr)1. feof函數(shù)測(cè)試文件結(jié)束標(biāo)志 feof函數(shù)的原型為: int feof (FILE *stream);該函數(shù)的調(diào)用格式常為: while (!feof (stream) 讀寫循環(huán)體;2. ferror函數(shù)測(cè)試流中的錯(cuò)誤 ferror函數(shù)的原型為: int ferror (FILE *stream);3. clearerr函數(shù)去除錯(cuò)誤標(biāo)志為0 clearerr函數(shù)原型為: void clearerr (

17、FILE *stream);20六、字符和字符串讀寫函數(shù)七、無(wú)格式轉(zhuǎn)換的讀寫函數(shù)fread和fwrite八、文件的定位九、一個(gè)簡(jiǎn)單的讀寫存盤程序步驟第13章 文 件 21六、字符和字符串讀寫函數(shù) 1. 讀取單個(gè)字符的fgetc函數(shù) fgetc函數(shù)的原型為: int fgetc (FILE * pSrcFile); FILE*型的入口形參指明讀取操作的來(lái)源, 實(shí)參匹配 fopen翻開的磁盤文件或stdin。 該函數(shù)從磁盤文件的當(dāng)前位置讀取一個(gè)字符, 定位源磁盤文件的位置指針向后移動(dòng)一個(gè)字節(jié)。如果該指針到達(dá)文件末尾,fgetc函數(shù)返回EOF。 注意例程getc與函數(shù)fgetc作用相同但可以作為函數(shù)

18、和宏出現(xiàn)。getchar()例程與getc(stdin)一致,亦可以作為函數(shù)和宏出現(xiàn)。 22例fgetc.cpp# include void main(void) FILE* fpGet =fopen (fgetc.cpp,r); if (fpGet=NULL) printf (fopen failedn); return; int i=0; char buffer512; while (feof (fpGet)=0 & i512) buffer i+= fgetc (fpGet); bufferi=0; printf (%sn,buffer); /fclose (fpGet); /程序運(yùn)行的

19、結(jié)果顯示fgetc.cpp在屏幕上 232. 存寫單個(gè)字符的fputc函數(shù) fputc函數(shù)的原型為:int fputc (int ch, FILE * pDstFile); fputc函數(shù)的第一個(gè)形參ch正是要存寫到第二個(gè)形參pDstFile關(guān)聯(lián)的磁盤文件中去的字符,該函數(shù)返回第一個(gè)入口形參的實(shí)參值。 pDstFile匹配一個(gè)fopen返回的流文件指針或stdout,調(diào)用失敗返回EOF。 24例 fputc.cpp # include void main (void) FILE* fpGet = fopen (fputc.cpp, r); if ( fpGet = NULL) printf (

20、fopen failedn); return; FILE* fpPut = fopen (fputc.xpp,w); if ( fpPut = NULL) printf (fopen failedn); return; while (!feof ( fpGet ) /while (feof (fpGet)=0) fputc (fgetc (fpGet), fpPut); fclose ( fpGet ); fclose ( fpPut ); 25 程序運(yùn)行之后即將上面的fputc.cpp源程序轉(zhuǎn)存到fputc.xpp中。 上面單個(gè)輸入輸出函數(shù)其返回類型是int型的數(shù)值,雖然處理的是僅一個(gè)字節(jié)長(zhǎng)

21、的字符。 因此接受這些函數(shù)的結(jié)果的變量最好定義成int型變量即: int ch1= fgetc ( pSrcFile ); 函數(shù)一般地會(huì)自動(dòng)進(jìn)行截?cái)嗾透呶粩?shù)的處理而只存寫低位。 而能不失包容性地應(yīng)付占兩個(gè)字節(jié)的重要結(jié)尾信息EOF(-1)。263. 按行讀文本串fgets函數(shù)函數(shù)fgets的原型為:char * fgets(char *pDstBuffer, int num, FILE * pSrcFile); FILE *型的入口形參pSrcFile定位數(shù)據(jù)的來(lái)源,匹配實(shí)參stdin或fopen函數(shù)讀模式返回的流文件的指針,從中讀取num-1個(gè)字符到char*的入口形參pDstBuffer標(biāo)

22、明的字符緩沖區(qū),pDstBuffer也就是該函數(shù)的返回地址。 如果在讀取num-1個(gè)字符之前遇到換行符n那么讀入結(jié)束;然后添補(bǔ)一個(gè)0字符,以表示字符串的規(guī)那么結(jié)束。 暗地里定位源磁盤文件的位置指針向后移動(dòng)字符緩沖區(qū)實(shí)際擁有的字節(jié)數(shù).pDstBuffer 匹配一個(gè)足夠大的字符數(shù)組.27例 fgets.cpp # include void main (void) FILE* fp=fopen ( fgets.cpp,r ); if ( fp=NULL ) printf (fopen failedn); return; char sBuffer128; for ( int k=0;k9;k+ ) i

23、f ( fgets ( sBuffer,128,fp )! = NULL) printf ( %s, sBuffer ); fclose ( fp ); /程序運(yùn)行的結(jié)果顯示 fgets.cpp在屏幕上。284. 按行寫文本串fputs函數(shù) 函數(shù)fputs的原型為: int fputs (const char *pSrcBuffer, FILE * pDstFile); 文本文件的操作一般按行進(jìn)行,一行一行地讀一行一行地寫,fgets函數(shù)執(zhí)行按行讀的操作,函數(shù)fputs那么按行寫。 fputs函數(shù)將第一個(gè)形參定位的只讀字符串送到送到第二個(gè)形參指明的目的文件中的當(dāng)前位置。 如果調(diào)用成功函數(shù)返回正

24、數(shù),在出現(xiàn)錯(cuò)誤時(shí)返回EOF。29例 fputs.cpp # include void main(void) FILE* fpRead = fopen (fputs.cpp,r); if ( fpRead = NULL ) printf ( fopen r failedn ); return; FILE* fpWrite = fopen ( fputsw.cpp, w) ; if ( fpWrite = NULL ) printf ( fopen w failedn ); return; 30 char s 81; while ( !feof ( fpRead ) /while ( feof (

25、 fpRead ) = =0) if ( fgets ( s, 81, fpRead )! = NULL ) fputs (s, fpWrite ); printf ( %s, s ); fclose ( fpWrite ); /程序運(yùn)行顯示fputs.cpp在屏幕上同時(shí)拷貝了一個(gè)備份在磁盤文件fputsw.cpp中31七、無(wú)格式轉(zhuǎn)換的讀寫函數(shù)fread和fwrite 函數(shù)直接讀寫磁盤文件的二進(jìn)制數(shù)據(jù),讀寫過(guò)程數(shù)據(jù)的信息未發(fā)生轉(zhuǎn)換。因而空間效率和時(shí)間效率都比較高。 1. 函數(shù)fread的原型為: size_t fread (void * pDst, size_t size, size_t it

26、ems , FILE * pSrc); 第一個(gè)參數(shù)pDst定位讀取數(shù)據(jù)的存放位置,匹配任意集合類型的起始地址。 第二個(gè)參數(shù)size指出數(shù)據(jù)的類型大小; size = sizeof ( type )。 32 第三個(gè)參數(shù)items指出數(shù)據(jù)的最大項(xiàng)數(shù),常對(duì)應(yīng)數(shù)組的維數(shù),單一變量或?qū)ο蟪H?。 第四個(gè)參數(shù)是FILE * 型的入口形參pSrc,指明讀入數(shù)據(jù)的來(lái)源。 fread返回實(shí)際讀取的項(xiàng)數(shù),函數(shù)從輸入文件中最多讀取items項(xiàng)數(shù),每一項(xiàng)含有size字節(jié),并將它們放入pDst起始的內(nèi)存中。 如果錯(cuò)誤發(fā)生那么所讀的結(jié)果是游移的。 與pSrc關(guān)聯(lián)的位置指針向后移動(dòng)實(shí)際讀取的字節(jié)數(shù)。332. fwrite存

27、寫函數(shù)函數(shù)fwrite的原型為: size_t fwrite(const void * pSrc, size_t size, size_t items, FILE * pDst ); 一般地fread總是讀取原先由frwite存寫的二進(jìn)制數(shù)據(jù); 第一個(gè)參數(shù)入口形參pSrc定位所寫數(shù)據(jù)的源位置,匹配任意集合類型的起始地址。 第四個(gè)參數(shù)入口形參 pDst指向待存寫的目的地即與pDst相關(guān)聯(lián)的磁盤文件。 其余兩個(gè)參數(shù)同fread函數(shù)。 34 函數(shù)fwrite 返回實(shí)際所存寫的數(shù)據(jù)項(xiàng)的個(gè)數(shù),如出現(xiàn)錯(cuò)誤返回值可少于items。 fwrite函數(shù)從pSrc定位地址起盡量轉(zhuǎn)送items個(gè)數(shù)據(jù)項(xiàng)到輸出流文件中

28、,位置指針遞增實(shí)際所寫的字節(jié)數(shù)。 上面兩個(gè)函數(shù)都存在void*的指針用于寬泛地定位內(nèi)存的地址,但由于其模糊性必伴隨具有size_t 類型的具體參數(shù)嚴(yán)格劃定數(shù)據(jù)的邊界,這是void*型形參函數(shù)的共性。 一般地fread總是讀取原先由frwite 存寫的二進(jìn)制數(shù)據(jù)。35例直接隨機(jī)方式處理結(jié)構(gòu)變量和數(shù)組 #include typedef struct SData int nLineset; float fAdjust; int nPoint; float fXa; float fYa; float fZa; CData; void WriteData ( CData pSrc , int n, FI

29、LE *fpDst ) switch (n) case 1: fwrite ( pSrc, sizeof (CData), 1 ,fpDst); break; default: fwrite ( pSrc, sizeof (CData), n, fpDst ); inline void ReadData (CData* pDst, int n, FILE *fpSrc ) fread ( pDst, sizeof ( CData ),n,fpSrc ); 36void PrintData ( const CData &d ) printf (“%4d,%4.1f,%4d,%4.1f,%4.1f

30、,%4.1fn, d.nLineset, d.fAdjust, d.nPoint, d.fXa, d.fYa, d.fZa); void main (void) CData s = 0,1,2,3,4,5; CData d = 1,2,3,4,5,6, 2,3,4,5,6,7, 3,4,5,6,7,8; FILE* fpWrite = fopen ( c:cdata.dat, w); if ( fpWrite = NULL) printf ( fopen w failedn ); return; WriteData ( &s, 1, fpWrite ); WriteData ( d, 3, f

31、pWrite ); fclose ( fpWrite ); FILE* fpRead = fopen ( c:cdata.dat, r ); 37 if ( fpRead = = NULL ) printf ( fopen r failedn ); return; CData b 4; ReadData ( b, 3, fpRead ); ReadData ( b+3, 1, fpRead ); for ( int k=0; k4; k+ ) PrintData ( bk ); c:cdata.dat文件的長(zhǎng)度為4*6*4=96個(gè)字節(jié),屏幕顯示結(jié)果為: 0, 1.0, 2, 3.0, 4.0,

32、 5.0 1, 2.0, 3, 4.0, 5.0, 6.0 2, 3.0, 4, 5.0, 6.0, 7.0 3, 4.0, 5, 6.0, 7.0, 8.038 fread和fwrite函數(shù)因其void*入口參數(shù)而可以匹配任意類型的變量地址,而稱為隨機(jī)讀寫函數(shù)。 但實(shí)際上數(shù)據(jù)的類型屬性轉(zhuǎn)移到size_t參數(shù)上去了,這個(gè)size_t參數(shù)n=sizeof (type)協(xié)同函數(shù)在定位好的內(nèi)存空間中讀寫數(shù)據(jù)。 因此數(shù)據(jù)類型屬性的匹配依然是環(huán)環(huán)相扣不可輕易錯(cuò)位的。即此類型的函數(shù)操作此類型的數(shù)據(jù)。隨機(jī)讀寫應(yīng)根據(jù)數(shù)據(jù)類型的匹配關(guān)系為: void WriteData ( CData*pSrc , int n

33、, FILE * fpDst) fwrite (pSrc,sizeof (CData), n, fpDst); void ReadData (CData* pDst ,int n,FILE * fpSrc) fread (pDst,sizeof(CData), n, fpSrc);39八、文件的定位1. ftell函數(shù)告知當(dāng)前位置 FILE結(jié)構(gòu)的聲明中有一個(gè)char *型指針成員 _ptr即索引數(shù)據(jù)流內(nèi)容的位置指針,該指針潛在地指向當(dāng)前文件的位置。 當(dāng)用戶首次翻開流文件進(jìn)行讀寫操作時(shí),操作系統(tǒng)把該位置指針設(shè)置在文件的開頭。 但特別地以追加方式a翻開文件時(shí),位置指針定位于文件的結(jié)尾處。每次讀寫一個(gè)字符時(shí),位置指針向前移動(dòng)一個(gè)字符。 如果從文件中讀寫一行文本,位置指針一般移到該行末尾或下一行開始處。40 ftell函數(shù)告知當(dāng)前位置函數(shù)ftell的原型為: long ftell (FILE * stream); 函數(shù)返回的lo

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論