




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、一、文本流和二進(jìn)制流一、文本流和二進(jìn)制流 內(nèi)存中的信息會(huì)由于程序運(yùn)轉(zhuǎn)的終了而內(nèi)存中的信息會(huì)由于程序運(yùn)轉(zhuǎn)的終了而消逝。程序運(yùn)轉(zhuǎn)消逝。程序運(yùn)轉(zhuǎn)的結(jié)果需求另外穩(wěn)定的介質(zhì)加以永久保管,的結(jié)果需求另外穩(wěn)定的介質(zhì)加以永久保管,這種可以長(zhǎng)期保這種可以長(zhǎng)期保留數(shù)據(jù)的存儲(chǔ)設(shè)備稱為磁盤文件。下面幾種留數(shù)據(jù)的存儲(chǔ)設(shè)備稱為磁盤文件。下面幾種是有影響的存儲(chǔ)是有影響的存儲(chǔ)方式:方式: 1. ANSI C 1. ANSI C 運(yùn)轉(zhuǎn)庫(kù)緩沖流的輸出輸出操作運(yùn)轉(zhuǎn)庫(kù)緩沖流的輸出輸出操作 2. C 2. C 運(yùn)轉(zhuǎn)庫(kù)低級(jí)輸出輸出操作運(yùn)轉(zhuǎn)庫(kù)低級(jí)輸出輸出操作 3. iotream 3. iotream類提供的類提供的I/OI/O操作操作
2、4. DOS 4. DOS 或或WINDOWS API WINDOWS API 端口操作端口操作 5. Microsoft Foundation 5. Microsoft Foundation 類庫(kù)的文件操作類庫(kù)的文件操作 在在C/C+中流可分為兩類:中流可分為兩類: 1) 文本流文本流(text stream); 1) 二進(jìn)制流二進(jìn)制流(binary stream) 文本流中的數(shù)據(jù)以字符方式出現(xiàn),文本以行作為終了。文本流中的數(shù)據(jù)以字符方式出現(xiàn),文本以行作為終了。 圖圖 數(shù)據(jù)的流入流出是一個(gè)相對(duì)概念數(shù)據(jù)的流入流出是一個(gè)相對(duì)概念 流流 入入 couta 流流 入入 磁盤 內(nèi)存 緩沖區(qū) 內(nèi)存 數(shù)據(jù)
3、區(qū) 鍵盤鍵盤 stdin stdout顯示器顯示器 stderr 打印機(jī)打印機(jī) stdprn二、流文件二、流文件 流文件是流文件是C C運(yùn)轉(zhuǎn)庫(kù)函數(shù)中由運(yùn)轉(zhuǎn)庫(kù)函數(shù)中由FILEFILE構(gòu)造有效構(gòu)造有效處置的硬件設(shè)處置的硬件設(shè)備的邏輯描畫。在這個(gè)稱為規(guī)范文件備的邏輯描畫。在這個(gè)稱為規(guī)范文件I/OI/O系統(tǒng)系統(tǒng)中中, , 定義了三個(gè)定義了三個(gè)文本流:文本流: stdin,stdout stdin,stdout和和stderrstderr。普通對(duì)如下前。普通對(duì)如下前3 3個(gè)規(guī)范設(shè)個(gè)規(guī)范設(shè)備,系統(tǒng)構(gòu)筑了流文件的索引方式,其相應(yīng)備,系統(tǒng)構(gòu)筑了流文件的索引方式,其相應(yīng)的非緩沖區(qū)的文的非緩沖區(qū)的文件代號(hào)一并羅列
4、如下:件代號(hào)一并羅列如下: 硬件設(shè)備硬件設(shè)備 預(yù)定義的流文件或流對(duì)象預(yù)定義的流文件或流對(duì)象 設(shè)備代號(hào)或句柄設(shè)備代號(hào)或句柄鍵鍵 盤規(guī)范輸入盤規(guī)范輸入 stdin cin stdin cin 0 0 顯示器規(guī)范輸出顯示器規(guī)范輸出 stdout cout stdout cout 1 1顯示器規(guī)范錯(cuò)誤顯示器規(guī)范錯(cuò)誤 stderr cerr stderr cerr 2 2串行口規(guī)范輔助串行口規(guī)范輔助 stdaux stdaux 3 3打印機(jī)規(guī)范打印打印機(jī)規(guī)范打印 stdprn clog stdprn clog 4 4 描畫流文件的描畫流文件的FILE數(shù)據(jù)構(gòu)造隨編譯器版本的不同而相數(shù)據(jù)構(gòu)造隨編譯器版本的不
5、同而相異,下面的描畫摘自微軟異,下面的描畫摘自微軟VC 6.0 頭文件頭文件stdio.h,該構(gòu)造的,該構(gòu)造的詳細(xì)聲明如下:詳細(xì)聲明如下: struct _iobuf char *_ptr; /1索引數(shù)據(jù)流內(nèi)容的位置指針?biāo)饕龜?shù)據(jù)流內(nèi)容的位置指針 int _cnt; /2當(dāng)前的定位標(biāo)志數(shù)當(dāng)前的定位標(biāo)志數(shù) char *_base; /3緩沖區(qū)基準(zhǔn)位置緩沖區(qū)基準(zhǔn)位置 int _flag; /4文件操作方式標(biāo)志文件操作方式標(biāo)志 int _file; /5文件的代號(hào)文件的代號(hào) int _charbuf; /6字符緩沖信息字符緩沖信息 int _bufsiz; /7緩沖區(qū)大小緩沖區(qū)大小 char *_tm
6、pfname; /8暫時(shí)文件名暫時(shí)文件名;typedef struct _iobuf FILE; 對(duì)于該構(gòu)造軟件供應(yīng)商并未逐一指明其中每一數(shù)據(jù)成員對(duì)于該構(gòu)造軟件供應(yīng)商并未逐一指明其中每一數(shù)據(jù)成員的詳細(xì)含義,規(guī)范輸入輸出函數(shù)的用戶不要冒然直接去操作的詳細(xì)含義,規(guī)范輸入輸出函數(shù)的用戶不要冒然直接去操作其中的成員,而經(jīng)過(guò)相應(yīng)的函數(shù)間接進(jìn)展。其中的成員,而經(jīng)過(guò)相應(yīng)的函數(shù)間接進(jìn)展。 三個(gè)預(yù)定義的流文件在三個(gè)預(yù)定義的流文件在vc 6.0的的stdio.h中經(jīng)過(guò)經(jīng)過(guò)外部中經(jīng)過(guò)經(jīng)過(guò)外部闡明語(yǔ)句和宏:闡明語(yǔ)句和宏: extern FILE _iob ;#define stdin (&_iob0)#define
7、stdout (&_iob1)#define stderr (&_iob2) 就曾經(jīng)在內(nèi)存中構(gòu)建就曾經(jīng)在內(nèi)存中構(gòu)建, 因此不對(duì)這三個(gè)規(guī)范的因此不對(duì)這三個(gè)規(guī)范的I/O設(shè)備進(jìn)設(shè)備進(jìn)行建立和去除任務(wù)。但其它的流文件需求程序員調(diào)用相關(guān)的行建立和去除任務(wù)。但其它的流文件需求程序員調(diào)用相關(guān)的函數(shù),進(jìn)展規(guī)那么的內(nèi)存分配和釋放任務(wù)。函數(shù),進(jìn)展規(guī)那么的內(nèi)存分配和釋放任務(wù)。三、文件的翻開函數(shù)三、文件的翻開函數(shù)fopen和封鎖函數(shù)和封鎖函數(shù)fclose1. 文件的翻開函數(shù)文件的翻開函數(shù)fopen 文件的翻開函數(shù)文件的翻開函數(shù)fopen是為要操作的磁盤是為要操作的磁盤文件對(duì)應(yīng)的數(shù)文件對(duì)應(yīng)的數(shù)據(jù)構(gòu)造分配內(nèi)存的函數(shù),這是
8、一個(gè)構(gòu)建據(jù)構(gòu)造分配內(nèi)存的函數(shù),這是一個(gè)構(gòu)建FILE的數(shù)據(jù)構(gòu)造變量的數(shù)據(jù)構(gòu)造變量的初始化函數(shù),系統(tǒng)經(jīng)過(guò)調(diào)用類似的初始化函數(shù),系統(tǒng)經(jīng)過(guò)調(diào)用類似malloc的的堆內(nèi)存分配函數(shù)堆內(nèi)存分配函數(shù)完成了完成了FILE型構(gòu)造變量的內(nèi)存分配。下面是型構(gòu)造變量的內(nèi)存分配。下面是fopen函數(shù)一個(gè)函數(shù)一個(gè)簡(jiǎn)約的函數(shù)原型:簡(jiǎn)約的函數(shù)原型: FILE * fopen (const char *filename, const char *mode); 函數(shù)前往一個(gè)指向堆空間的函數(shù)前往一個(gè)指向堆空間的FILE *型的型的流文件指針。不流文件指針。不如確切地說(shuō)該函數(shù)在堆空間誕生了一個(gè)如確切地說(shuō)該函數(shù)在堆空間誕生了一個(gè)FILE
9、型構(gòu)造變量。型構(gòu)造變量。 兩個(gè)兩個(gè)const char *型的入口參數(shù)對(duì)上面的構(gòu)呵斥員執(zhí)行型的入口參數(shù)對(duì)上面的構(gòu)呵斥員執(zhí)行了部分初始化賦值。第一個(gè)參數(shù)了部分初始化賦值。第一個(gè)參數(shù)filename是定位磁盤文件路是定位磁盤文件路徑的文件名,該文件名通常是雙引號(hào)括起來(lái)的只讀字符串。徑的文件名,該文件名通常是雙引號(hào)括起來(lái)的只讀字符串。 在運(yùn)用含途徑的文件名時(shí),留意在運(yùn)用含途徑的文件名時(shí),留意“的運(yùn)用,對(duì)于硬盤的運(yùn)用,對(duì)于硬盤中的文件中的文件d:mydocu_1ex.cpp 應(yīng)寫成應(yīng)寫成 “d:mydocu_1ex1.cpp 或進(jìn)展如下的初始賦值或進(jìn)展如下的初始賦值:const char *filen
10、ame=d:mydocu_1ex1.cpp; 第二個(gè)以只讀字符串的方式出現(xiàn)的參數(shù)第二個(gè)以只讀字符串的方式出現(xiàn)的參數(shù)mode,界定文,界定文件訪問(wèn)操作的方式。其有效的取值組合和含義見下一頁(yè)件訪問(wèn)操作的方式。其有效的取值組合和含義見下一頁(yè) mode 含義含義 r 以以read only 方式翻開一個(gè)文本文件,假設(shè)方式翻開一個(gè)文本文件,假設(shè) 輸入文件不存在或未找到輸入文件不存在或未找到fopen失敗失敗 w 以以write only方式翻開一個(gè)文本文件,假設(shè)方式翻開一個(gè)文本文件,假設(shè) 輸出文件已存在,內(nèi)容將全覆蓋輸出文件已存在,內(nèi)容將全覆蓋 a 以寫和以寫和append方式在文本文件末尾追加,如方式
11、在文本文件末尾追加,如 果它不存在那么先建立該文件果它不存在那么先建立該文件 r+ 以讀或?qū)懙姆绞椒_一個(gè)必需曾經(jīng)存在的文以讀或?qū)懙姆绞椒_一個(gè)必需曾經(jīng)存在的文 本文件本文件 w+ 以讀或?qū)懙姆绞椒_一個(gè)空文件,假設(shè)給定的以讀或?qū)懙姆绞椒_一個(gè)空文件,假設(shè)給定的 文件名存在原來(lái)的內(nèi)容將被沖洗文件名存在原來(lái)的內(nèi)容將被沖洗 a+ 以讀以讀/寫和追加方式翻開文件,假設(shè)該文件不存寫和追加方式翻開文件,假設(shè)該文件不存 在那么先建立它在那么先建立它 rb 以只讀方式翻開一個(gè)以只讀方式翻開一個(gè)binary輸入文件,假設(shè)文件輸入文件,假設(shè)文件 不存在或未找到不存在或未找到fopen失敗失敗 wb 以只寫方式翻
12、開一個(gè)二進(jìn)制輸出文件,假設(shè)文件以只寫方式翻開一個(gè)二進(jìn)制輸出文件,假設(shè)文件 已存在,內(nèi)容將全覆蓋已存在,內(nèi)容將全覆蓋 ab 以以append方式在方式在binary文件末尾追加,假設(shè)它文件末尾追加,假設(shè)它 不存在那么先建立該文件不存在那么先建立該文件 rb+ 以讀或?qū)懙姆绞椒_一個(gè)必需曾經(jīng)存在的二進(jìn)制以讀或?qū)懙姆绞椒_一個(gè)必需曾經(jīng)存在的二進(jìn)制 文件文件 wb+ 以讀或?qū)懙姆绞椒_一個(gè)空以讀或?qū)懙姆绞椒_一個(gè)空binary文件,假設(shè)文文件,假設(shè)文 件名存在原來(lái)的內(nèi)容將被銷毀件名存在原來(lái)的內(nèi)容將被銷毀 ab+ 以讀和追加方式翻開二進(jìn)制文件,假設(shè)該文件不以讀和追加方式翻開二進(jìn)制文件,假設(shè)該文件不 存在
13、那么先建立它存在那么先建立它 指定文件的缺省操作類型取決于一個(gè)全局變量指定文件的缺省操作類型取決于一個(gè)全局變量 _fmode,vc6.0 里在頭文件里在頭文件stdlib.h中聲明為中聲明為extern int _fmode;,系統(tǒng)設(shè)置的默許值是文本方式即,系統(tǒng)設(shè)置的默許值是文本方式即: _fmode=O_TEXT=0 x4000 假設(shè)從文本方式切換為二進(jìn)制方式,可以在程序中令:假設(shè)從文本方式切換為二進(jìn)制方式,可以在程序中令: _fmode= O_BINARY; 假設(shè)在翻開文件發(fā)生錯(cuò)誤,那么假設(shè)在翻開文件發(fā)生錯(cuò)誤,那么fopen都前往都前往NULL即即0,其潛在的緣由有:其潛在的緣由有: a.
14、 以讀方式翻開一個(gè)并不存在的文件以讀方式翻開一個(gè)并不存在的文件 b. 翻開一個(gè)無(wú)權(quán)操作的文件如該文件已標(biāo)明只讀或隱翻開一個(gè)無(wú)權(quán)操作的文件如該文件已標(biāo)明只讀或隱藏屬性試圖寫追加翻開藏屬性試圖寫追加翻開 c. 以追加方式對(duì)文件操作但磁盤空間缺乏以追加方式對(duì)文件操作但磁盤空間缺乏2.2.文件的封鎖函數(shù)文件的封鎖函數(shù)fclosefclose 函數(shù)函數(shù)fclosefclose公用于釋放由函數(shù)公用于釋放由函數(shù)fopenfopen懇求懇求的堆空間,及的堆空間,及時(shí)完成緩沖區(qū)數(shù)據(jù)的到位。時(shí)完成緩沖區(qū)數(shù)據(jù)的到位。fclosefclose的函數(shù)原型為:的函數(shù)原型為: int fclose int fclose (
15、FILE (FILE * * fp); fp);fclosefclose的函數(shù)原型為:的函數(shù)原型為:int fclose (FILE int fclose (FILE * * fp); fp); 其中入口形參匹配函數(shù)其中入口形參匹配函數(shù)fopenfopen前往的指針值,前往的指針值,函數(shù)函數(shù)fclosefclose調(diào)用勝利前往數(shù)值調(diào)用勝利前往數(shù)值0 0,否那么前往,否那么前往EOFEOF即即-1-1。 該函數(shù)不操作預(yù)定義的流文件該函數(shù)不操作預(yù)定義的流文件stdin,stdoutstdin,stdout和和stderrstderr,它們是指向全局構(gòu)造變量的指針。這樣函數(shù)調(diào)用:它們是指向全局構(gòu)造變
16、量的指針。這樣函數(shù)調(diào)用: fclose (fp); fclose (fp); 就封鎖了先前由就封鎖了先前由fopenfopen函數(shù)翻開的文件指針?biāo)瘮?shù)翻開的文件指針?biāo)鶎?duì)應(yīng)的堆空對(duì)應(yīng)的堆空間。間。四、格式讀寫四、格式讀寫fprintffprintf和和fscanffscanf函數(shù)函數(shù) 1. fprintf 1. fprintf輸出函數(shù)輸出函數(shù) fprintf fprintf輸出函數(shù)的普通方式為:輸出函數(shù)的普通方式為: int fprintf (FILE int fprintf (FILE* * pTarget, const char pTarget, const char* * format,
17、format, argument_list);argument_list); int fprintf (int fprintf (流文件的目的地,格式控制串,流文件的目的地,格式控制串,參量列表參量列表); ); fprintf fprintf函數(shù)格式控制串與函數(shù)格式控制串與printfprintf中的一樣。中的一樣。將將fprintf fprintf 的的第一個(gè)形參第一個(gè)形參pTargetpTarget取為實(shí)參取為實(shí)參stdoutstdout,其調(diào)用格式,其調(diào)用格式相當(dāng)于相當(dāng)于printfprintf函數(shù)。即函數(shù)。即 fprintf (stdout, fprintf (stdout,格式控制
18、串格式控制串, ,參量列表參量列表); ); 相當(dāng)于相當(dāng)于: printf (: printf (格式控制串格式控制串, ,參量列表參量列表); ); 在運(yùn)用在運(yùn)用fprintf將內(nèi)存數(shù)據(jù)寫到磁盤文件之前,先要指明將內(nèi)存數(shù)據(jù)寫到磁盤文件之前,先要指明磁盤文件的目的所在,因此經(jīng)過(guò)磁盤文件的目的所在,因此經(jīng)過(guò)fopen函數(shù)的寫方式獲得目函數(shù)的寫方式獲得目標(biāo)地址。標(biāo)地址。如:如: FILE *fpWrite= fopen (writeFile , w);如此之后就可以調(diào)用的如此之后就可以調(diào)用的 fprintf 函數(shù)函數(shù).如如: fprintf (fpWrite, format, v_list); f
19、printf (流文件目的地流文件目的地, 格式控制串格式控制串, 變量列表變量列表);2. fscanf輸入函數(shù)輸入函數(shù) fscanf函數(shù)的普通方式為:函數(shù)的普通方式為: int fscanf (FILE* pSource, const char* format, address_list); int fscanf (流文件的來(lái)源處流文件的來(lái)源處, 格式控制串格式控制串, 變變量的地址列表;量的地址列表; 將將fscanf的第一個(gè)形參的第一個(gè)形參pSource實(shí)參化為實(shí)參化為stdin,其調(diào)其調(diào)用格式相當(dāng)于用格式相當(dāng)于scanf函數(shù)。即:函數(shù)。即: fscanf ( stdin, 格式控制串
20、格式控制串, 變量地址變量地址1, 變量地變量地址址2 . 變量地址變量地址n);相當(dāng)于:相當(dāng)于: scanf (格式控制串格式控制串, 變量地址變量地址1, 變量地址變量地址2 . 變變量地址量地址n); 在調(diào)用在調(diào)用fscanf函數(shù)將磁盤源文件中的數(shù)據(jù)送到變量所占函數(shù)將磁盤源文件中的數(shù)據(jù)送到變量所占住的內(nèi)存之前,先應(yīng)指明待讀的磁盤文件,因此借助住的內(nèi)存之前,先應(yīng)指明待讀的磁盤文件,因此借助fopen函數(shù)的讀方式得到數(shù)據(jù)源流的地址函數(shù)的讀方式得到數(shù)據(jù)源流的地址如:如: FILE *fpRead= fopen (readFile, r);如此之后就可以調(diào)用輸入函數(shù)如此之后就可以調(diào)用輸入函數(shù)fs
21、canf。格式為:格式為: fscanf (fpRead, format, address_list); 例例 格式轉(zhuǎn)換處置一個(gè)構(gòu)造變量格式轉(zhuǎn)換處置一個(gè)構(gòu)造變量.#include typedef struct SData int nLineset; float fAdjust; int nPoint; float fXa; float fYa; float fZa; CData; void OutputData (const char *filename, const CData &d ) FILE *fp= fopen(filename, w); fprintf (fp,%d,%f,%dn,
22、d.nLineset,d.fAdjust,d.nPoint);/1 fprintf (fp,%f,%f,%fn, d.fXa,d.fYa,d.fZa);/2 fclose (fp); void InputData (const char *filename, CData &d ) FILE *fp = fopen (filename, r); fscanf (fp, %d, %f, %d, &d.nLineset, &d. fAdjust, &d.nPoint); fscanf (fp,%f,%f,%f, &d.fXa, &d.fYa, &d.fZa); /2 fclose (fp); void main (void) CData s= 1,2,3,4,5,6; Out
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025遼寧省建筑安全員C證考試(專職安全員)題庫(kù)及答案
- 信用卡放款合同范本
- 二年級(jí)口算練習(xí)冊(cè)100道
- 三年級(jí)口算題目全集1000道
- 二年級(jí)數(shù)學(xué)口算練習(xí)100道
- 公司策劃部門招工合同范本
- 關(guān)于旅游電子合同范本
- 出口工廠直銷合同范本
- 公司增加股東合同范本
- 廠房自動(dòng)出租合同范例
- 中國(guó)老年危重患者營(yíng)養(yǎng)支持治療指南2023解讀課件
- 《光伏電站運(yùn)行與維護(hù)》試題及答案一
- DBJ∕T 15-19-2020 建筑防水工程技術(shù)規(guī)程
- 2024年貴州省高職(??疲┓诸惪荚囌惺罩新毊厴I(yè)生文化綜合考試語(yǔ)文試題
- 二十四式太極拳教案高一上學(xué)期體育與健康人教版
- 2024-2025學(xué)年外研版(2024)七年級(jí)英語(yǔ)上冊(cè)英語(yǔ)各單元教學(xué)設(shè)計(jì)
- 國(guó)家病案質(zhì)控死亡病例自查表
- 一年級(jí)體育教案全冊(cè)(水平一)下冊(cè)
- 全身麻醉后護(hù)理常規(guī)
- 《積極心理學(xué)(第3版)》 課件 第2章 心理流暢體驗(yàn)、第3章 積極情緒的價(jià)值
- 2024至2030年全球及中國(guó)3D硅電容器行業(yè)研究及十四五規(guī)劃分析報(bào)告
評(píng)論
0/150
提交評(píng)論