版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
一、文本流和二進(jìn)制流二、流文件三、文件的打開函數(shù)fopen和關(guān)閉函數(shù)fclose四、格式讀寫fprintf和fscanf函數(shù)五、出錯(cuò)測(cè)試或清除函(feof,ferror,clearerr)第13章文件1一、文本流和二進(jìn)制流第13章文件1一、文本流和二進(jìn)制流內(nèi)存中的信息會(huì)由于程序運(yùn)行的結(jié)束而消失。程序運(yùn)行的結(jié)果需要另外穩(wěn)定的介質(zhì)加以永久保存,這種可以長(zhǎng)期保留數(shù)據(jù)的存儲(chǔ)設(shè)備稱為磁盤文件。下面幾種是有影響的存儲(chǔ)方式:
1.ANSIC運(yùn)行庫(kù)緩沖流的輸出輸出操作
2.C運(yùn)行庫(kù)低級(jí)輸出輸出操作
3.iotream類提供的I/O操作
4.DOS或WINDOWSAPI端口操作5.MicrosoftFoundation類庫(kù)的文件操作
2一、文本流和二進(jìn)制流2在C/C++中流可分為兩類:
1)文本流(textstream);1)二進(jìn)制流(binarystream)文本流中的數(shù)據(jù)以字符形式出現(xiàn),文本以行作為結(jié)束。
圖數(shù)據(jù)的流入流出是一個(gè)相對(duì)概念
流入cout<<b輸出輸入cin>>a流入
磁盤
內(nèi)存緩沖區(qū)
內(nèi)存數(shù)據(jù)區(qū)
鍵盤stdinstdout顯示器stderr打印機(jī)stdprn3在C/C++中流可分為兩類:圖數(shù)據(jù)的流入流出是一個(gè)二、流文件流文件是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)的非緩沖區(qū)的文件代號(hào)一并羅列如下:
硬件設(shè)備預(yù)定義的流文件或流對(duì)象設(shè)備代號(hào)或句柄鍵盤(標(biāo)準(zhǔn)輸入)stdincin0顯示器(標(biāo)準(zhǔn)輸出)stdoutcout1顯示器(標(biāo)準(zhǔn)錯(cuò)誤)stderrcerr2串行口(標(biāo)準(zhǔn)輔助)stdaux3打印機(jī)(標(biāo)準(zhǔn)打?。﹕tdprnclog44二、流文件4描述流文件的FILE數(shù)據(jù)結(jié)構(gòu)隨編譯器版本的不同而相異,下面的描述摘自微軟VC6.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_flag;//4文件操作模式標(biāo)記int_file;//5文件的代號(hào)int_charbuf;//6字符緩沖信息int_bufsiz;//7緩沖區(qū)大小char*_tmpfname;//8臨時(shí)文件名};typedefstruct_iobufFILE;5描述流文件的FILE數(shù)據(jù)結(jié)構(gòu)隨編譯器版本的對(duì)于該結(jié)構(gòu)軟件供應(yīng)商并未逐一指明其中每一數(shù)據(jù)成員的詳細(xì)含義,標(biāo)準(zhǔn)輸入輸出函數(shù)的用戶不要冒然直接去操作其中的成員,而通過(guò)相應(yīng)的函數(shù)間接進(jìn)行。 三個(gè)預(yù)定義的流文件在vc6.0的stdio.h中通過(guò)通過(guò)外部說(shuō)明語(yǔ)句和宏:
externFILE_iob[]; #definestdin(&_iob[0]) #definestdout(&_iob[1]) #definestderr(&_iob[2]) 就已經(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對(duì)于該結(jié)構(gòu)軟件供應(yīng)商并未逐一指明其中每一數(shù)據(jù)成三、文件的打開函數(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(constchar*filename,constchar*mode);函數(shù)返回一個(gè)指向堆空間的FILE*型的流文件指針。不如確切地說(shuō)該函數(shù)在堆空間誕生了一個(gè)FILE型結(jié)構(gòu)變量。7三、文件的打開函數(shù)fopen和關(guān)閉函數(shù)fclose7兩個(gè)constchar*型的入口參數(shù)對(duì)上面的結(jié)構(gòu)成員執(zhí)行了部分初始化賦值。第一個(gè)參數(shù)filename是定位磁盤文件路徑的文件名,該文件名通常是雙引號(hào)括起來(lái)的只讀字符串。在使用含路徑的文件名時(shí),注意“\”的使用,對(duì)于硬盤中的文件d:\mydocu_1\ex.cpp應(yīng)寫成“d:\\mydocu_1\\ex1.cpp”或進(jìn)行如下的初始賦值:constchar*filename="d:\\mydocu_1\\ex1.cpp"; 第二個(gè)以只讀字符串的形式出現(xiàn)的參數(shù)mode,界定文件訪問(wèn)操作的模式。(其有效的取值組合和含義見下一頁(yè))8兩個(gè)constchar*型的入口參數(shù)對(duì)上mode含義"r"以readonly方式打開一個(gè)文本文件,如果輸入文件不存在或未找到fopen失敗"w"以writeonly方式打開一個(gè)文本文件,如果輸出文件已存在,內(nèi)容將全覆蓋"a"以寫和append方式在文本文件末尾追加,如果它不存在則先建立該文件"r+"以讀或?qū)懙姆绞酱蜷_一個(gè)必須已經(jīng)存在的文本文件"w+"以讀或?qū)懙姆绞酱蜷_一個(gè)空文件,如果給定的文件名存在原來(lái)的內(nèi)容將被沖洗"a+"以讀/寫和追加方式打開文件,如果該文件不存在則先建立它9mode含義9"rb"以只讀方式打開一個(gè)binary輸入文件,如果文件不存在或未找到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"rb"以只讀方式打開一個(gè)binary輸指定文件的缺省操作類型取決于一個(gè)全局變量_fmode,vc6.0里在頭文件stdlib.h中聲明為[externint_fmode;],系統(tǒng)設(shè)置的默認(rèn)值是文本方式即:_fmode=O_TEXT=0x4000如果從文本方式切換為二進(jìn)制模式,可以在程序中令:_fmode=O_BINARY;如果在打開文件發(fā)生錯(cuò)誤,則fopen都返回NULL即0,其潛在的原因有:
a.以讀模式打開一個(gè)并不存在的文件
b.打開一個(gè)無(wú)權(quán)操作的文件(如該文件已標(biāo)明只讀或隱藏屬性試圖寫追加打開)
c.以追加方式對(duì)文件操作但磁盤空間不足11指定文件的缺省操作類型取決于一個(gè)全局變量2.文件的關(guān)閉函數(shù)fclose函數(shù)fclose專用于釋放由函數(shù)fopen申請(qǐng)的堆空間,及時(shí)完成緩沖區(qū)數(shù)據(jù)的到位。fclose的函數(shù)原型為:
intfclose(FILE*fp);fclose的函數(shù)原型為:intfclose(FILE*fp);其中入口形參匹配函數(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)的堆空間。122.文件的關(guān)閉函數(shù)fclose12四、格式讀寫fprintf和fscanf函數(shù)
1.fprintf輸出函數(shù)fprintf輸出函數(shù)的一般形式為:
intfprintf(FILE*pTarget,constchar*format,argument_list); intfprintf(流文件的目的地,格式控制串,參量列表);
fprintf函數(shù)格式控制串與printf中的相同。將fprintf的第一個(gè)形參pTarget取為實(shí)參stdout,其調(diào)用格式相當(dāng)于printf函數(shù)。即
fprintf(stdout,格式控制串,參量列表);
相當(dāng)于:printf(格式控制串,參量列表);
13四、格式讀寫fprintf和fscanf函數(shù)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);fprintf(流文件目的地,格式控制串,變量列表);14在使用fprintf將內(nèi)存數(shù)據(jù)寫到磁盤文件之2.fscanf輸入函數(shù)fscanf函數(shù)的一般形式為:
intfscanf(FILE*pSource,constchar*format,address_list); intfscanf(流文件的來(lái)源處,格式控制串,變量的地址列表);將fscanf的第一個(gè)形參pSource實(shí)參化為stdin,其調(diào)用格式相當(dāng)于scanf函數(shù)。即:
fscanf(stdin,格式控制串,變量地址1,變量地址2....變量地址n);相當(dāng)于:
scanf(格式控制串,變量地址1,變量地址2....變量地址n);
152.fscanf輸入函數(shù)15在調(diào)用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在調(diào)用fscanf函數(shù)將磁盤源文件中的數(shù)據(jù)送到[例]格式轉(zhuǎn)換處理一個(gè)結(jié)構(gòu)變量.#include<stdio.h>typedefstructSData{intnLineset;floatfAdjust;intnPoint; floatfXa; floatfYa; floatfZa; }CData;voidOutputData(constchar*filename,constCData&d) {FILE*fp=fopen(filename,"w");
fprintf(fp,"%d,%f,%d\n",d.nLineset,d.fAdjust,d.nPoint);//1 fprintf(fp,"%f,%f,%f\n",d.fXa,d.fYa,d.fZa);//2 fclose(fp); }17[例]格式轉(zhuǎn)換處理一個(gè)結(jié)構(gòu)變量.17voidInputData(constchar*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);} 1818voidmain(void){CDatas={1,2,3,4,5,6};OutputData("c:\\sdata.out",s);CDatad;InputData("c:\\sdata.out",d);OutputData("c:\\cdata.out",d); }在文件c:\cdata.out中輸出結(jié)果為:1,2.000000,34.000000,5.000000,6.000000在文件c:\sdata.out中輸出結(jié)果為:1,2.000000,34.000000,5.000000,6.00000019voidmain(void)19五、出錯(cuò)測(cè)試或清除函(feof,ferror,clearerr)1.feof函數(shù)測(cè)試文件結(jié)束標(biāo)志feof函數(shù)的原型為:
intfeof(FILE*stream);該函數(shù)的調(diào)用格式常為:
while(!feof(stream))讀寫循環(huán)體;2.ferror函數(shù)測(cè)試流中的錯(cuò)誤ferror函數(shù)的原型為:
intferror(FILE*stream);3.clearerr函數(shù)清除錯(cuò)誤標(biāo)志為0 clearerr函數(shù)原型為:
[voidclearerr(FILE*stream);]20五、出錯(cuò)測(cè)試或清除函(feof,ferror,clearer
六、字符和字符串讀寫函數(shù)
七、無(wú)格式轉(zhuǎn)換的讀寫函數(shù)fread和fwrite
八、文件的定位
九、一個(gè)簡(jiǎn)單的讀寫存盤程序步驟第13章文件21第13章文件21六、字符和字符串讀寫函數(shù)
1.讀取單個(gè)字符的fgetc函數(shù)
fgetc函數(shù)的原型為:intfgetc(FILE*pSrcFile);
FILE*型的入口形參指明讀取操作的來(lái)源,實(shí)參匹配fopen打開的磁盤文件或stdin。該函數(shù)從磁盤文件的當(dāng)前位置讀取一個(gè)字符,定位源磁盤文件的位置指針向后移動(dòng)一個(gè)字節(jié)。如果該指針到達(dá)文件末尾,fgetc函數(shù)返回EOF。
注意例程getc與函數(shù)fgetc作用相同但可以作為函數(shù)和宏出現(xiàn)。getchar()例程與getc(stdin)一致,亦可以作為函數(shù)和宏出現(xiàn)。22六、字符和字符串讀寫函數(shù)22[例]fgetc.cpp#include<stdio.h>voidmain(void){FILE*fpGet=fopen("fgetc.cpp","r"); if(fpGet==NULL){printf("fopenfailed\n");return;}inti=0; charbuffer[512]; while(feof(fpGet)==0&&i<512)buffer[i++]=fgetc(fpGet); buffer[i]='\0'; printf("%s\n",buffer); //fclose(fpGet); }//程序運(yùn)行的結(jié)果顯示fgetc.cpp在屏幕上23[例]fgetc.cpp232.存寫單個(gè)字符的fputc函數(shù)fputc函數(shù)的原型為:intfputc(intch,FILE*pDstFile);fputc函數(shù)的第一個(gè)形參ch正是要存寫到第二個(gè)形參pDstFile關(guān)聯(lián)的磁盤文件中去的字符,該函數(shù)返回第一個(gè)入口形參的實(shí)參值。pDstFile匹配一個(gè)fopen返回的流文件指針或stdout,調(diào)用失敗返回EOF。242.存寫單個(gè)字符的fputc函數(shù)24[例]fputc.cpp#include<stdio.h>voidmain(void){FILE*fpGet=fopen("fputc.cpp","r");if(fpGet==NULL){printf("fopenfailed\n");return;}FILE*fpPut=fopen("fputc.xpp","w"); if(fpPut==NULL){printf("fopenfailed\n");return;} while(!feof(fpGet))//while(feof(fpGet)==0)fputc(fgetc(fpGet),fpPut);fclose(fpGet);fclose(fpPut);}25[例]fputc.cpp25程序運(yùn)行之后即將上面的fputc.cpp源程序轉(zhuǎn)存到fputc.xpp中。上面單個(gè)輸入輸出函數(shù)其返回類型是int型的數(shù)值,雖然處理的是僅一個(gè)字節(jié)長(zhǎng)的字符。因此接受這些函數(shù)的結(jié)果的變量最好定義成int型變量即:intch1=fgetc(pSrcFile); 函數(shù)一般地會(huì)自動(dòng)進(jìn)行截?cái)嗾透呶粩?shù)的處理而只存寫低位。而能不失包容性地應(yīng)付占兩個(gè)字節(jié)的重要結(jié)尾信息EOF(-1)。26程序運(yùn)行之后即將上面的fputc.c3.按行讀文本串fgets函數(shù)函數(shù)fgets的原型為:char*fgets(char*pDstBuffer,intnum,FILE*pSrcFile); FILE*型的入口形參pSrcFile定位數(shù)據(jù)的來(lái)源,匹配實(shí)參stdin或fopen函數(shù)讀模式返回的流文件的指針,從中讀取num-1個(gè)字符到char*的入口形參pDstBuffer標(biāo)明的字符緩沖區(qū),pDstBuffer也就是該函數(shù)的返回地址。如果在讀取num-1個(gè)字符之前遇到換行符\n則讀入結(jié)束;然后添補(bǔ)一個(gè)\0字符,以表示字符串的規(guī)則結(jié)束。暗地里定位源磁盤文件的位置指針向后移動(dòng)字符緩沖區(qū)實(shí)際擁有的字節(jié)數(shù).pDstBuffer匹配一個(gè)足夠大的字符數(shù)組.273.按行讀文本串fgets函數(shù)27[例]fgets.cpp
#include<stdio.h>voidmain(void){FILE*fp=fopen("fgets.cpp","r");if(fp==NULL){printf("fopenfailed\n");return;}charsBuffer[128]; for(intk=0;k<9;k++) if(fgets(sBuffer,128,fp)!=NULL)printf("%s",sBuffer);fclose(fp);}//程序運(yùn)行的結(jié)果顯示fgets.cpp在屏幕上。28[例]fgets.cpp284.按行寫文本串fputs函數(shù)
函數(shù)fputs的原型為:
intfputs(constchar*pSrcBuffer,FILE*pDstFile);文本文件的操作一般按行進(jìn)行,一行一行地讀一行一行地寫,fgets函數(shù)執(zhí)行按行讀的操作,函數(shù)fputs則按行寫。
fputs函數(shù)將第一個(gè)形參定位的只讀字符串送到送到第二個(gè)形參指明的目的文件中的當(dāng)前位置。如果調(diào)用成功函數(shù)返回正數(shù),在出現(xiàn)錯(cuò)誤時(shí)返回EOF。294.按行寫文本串fputs函數(shù)29[例]fputs.cpp#include<stdio.h>voidmain(void){ FILE*fpRead=fopen("fputs.cpp","r");if(fpRead==NULL){printf("fopenrfailed\n");return;}FILE*fpWrite=fopen("fputsw.cpp","w"); if(fpWrite==NULL){printf("fopenwfailed\n");return;} 30[例]fputs.cpp30chars[81]; while(!feof(fpRead))//while(feof(fpRead)==0) if(fgets(s,81,fpRead)!=NULL) {fputs(s,fpWrite);printf("%s",s);} fclose(fpWrite);}
//程序運(yùn)行顯示fputs.cpp在屏幕上同時(shí)拷貝了一個(gè)備份在磁盤文件fputsw.cpp中31chars[81];七、無(wú)格式轉(zhuǎn)換的讀寫函數(shù)fread和fwrite函數(shù)直接讀寫磁盤文件的二進(jìn)制數(shù)據(jù),讀寫過(guò)程數(shù)據(jù)的信息未發(fā)生轉(zhuǎn)換。因而空間效率和時(shí)間效率都比較高。1.函數(shù)fread的原型為:
size_tfread(void*pDst,size_tsize,size_titems,FILE*pSrc);第一個(gè)參數(shù)pDst定位讀取數(shù)據(jù)的存放位置,匹配任意集合類型的起始地址。 第二個(gè)參數(shù)size指出數(shù)據(jù)的類型大小;size=sizeof(type)。
32七、無(wú)格式轉(zhuǎn)換的讀寫函數(shù)fread和fwrite32第三個(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ù)。33第三個(gè)參數(shù)items指出數(shù)據(jù)的最大項(xiàng)數(shù),常對(duì)2.fwrite存寫函數(shù)函數(shù)fwrite的原型為:
size_tfwrite(constvoid*pSrc,size_tsize,size_titems,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ù)。
342.fwrite存寫函數(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)到輸出流文件中,位置指針遞增實(shí)際所寫的字節(jié)數(shù)。上面兩個(gè)函數(shù)都存在void*的指針用于寬泛地定位內(nèi)存的地址,但由于其含糊性必伴隨具有size_t類型的具體參數(shù)嚴(yán)格劃定數(shù)據(jù)的邊界,這是void*型形參函數(shù)的共性。 一般地fread總是讀取原先由frwite存寫的二進(jìn)制數(shù)據(jù)。35函數(shù)fwrite返回實(shí)際所存寫的數(shù)據(jù)項(xiàng)的個(gè)[例]直接隨機(jī)方式處理結(jié)構(gòu)變量和數(shù)組#include<stdio.h>typedefstructSData{intnLineset;floatfAdjust;intnPoint; floatfXa; floatfYa;floatfZa; }CData;voidWriteData(CDatapSrc[],intn,FILE*fpDst){switch(n){case1: fwrite(pSrc,sizeof(CData),1,fpDst);break; default: fwrite(pSrc,sizeof(CData),n,fpDst);}}inlinevoidReadData(CData*pDst,intn,FILE*fpSrc){fread(pDst,sizeof(CData),n,fpSrc);}36[例]直接隨機(jī)方式處理結(jié)構(gòu)變量和數(shù)組36voidPrintData(constCData&d){printf(“%4d,%4.1f,%4d,%4.1f,%4.1f,%4.1f\n”,d.nLineset,d.fAdjust,d.nPoint,d.fXa,d.fYa,d.fZa);}voidmain(void) {CDatas={0,1,2,3,4,5};CDatad[]={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("fopenwfailed\n");return;} WriteData(&s,1,fpWrite);WriteData(d,3,fpWrite); fclose(fpWrite);FILE*fpRead=fopen("c:\\cdata.dat","r");
37voidPrintData(constCData&if(fpRead==NULL){printf("fopenrfailed\n");return;}CDatab[4];ReadData(b,3,fpRead);ReadData(b+3,1,fpRead);for(intk=0;k<4;k++)PrintData(b[k]);}
c:\cdata.dat文件的長(zhǎng)度為4*6*4=96個(gè)字節(jié),屏幕顯示結(jié)果為:0,1.0,2,3.0,4.0,5.01,2.0,3,4.0,5.0,6.02,3.0,4,5.0,6.0,7.03,4.0,5,6.0,7.0,8.038if(fpRead==NULL)38fread和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)系為:voidWriteData(CData*pSrc,intn,FILE*fpDst){fwrite(pSrc,sizeof(CData),n,fpDst);}
voidReadData(CData*pDst,intn,FILE*fpSrc){fread(pDst,sizeof(CData),n,fpSrc);}39fread和fwrite函數(shù)因其void*入八、文件的定位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八、文件的定位40ftell函數(shù)告知當(dāng)前位置函數(shù)ftell的原型為:
longftell(FILE*stream);函數(shù)返回的long型值為指定文件中的當(dāng)前位置相對(duì)于流文件起始位置的字節(jié)偏移量,stream一般匹配fopen函數(shù)打開的文件。[例]ftell.cpp#include<stdio.h> voidmain(void){FILE*stream=fopen("ftell.cpp","rb");doublea[20];fread(a,sizeof(double),20,stream);printf("%d\n",ftell(stream));}//輸出16041ftell函數(shù)告知當(dāng)前位置函數(shù)ftell的原2.fseek函數(shù)探尋文件的位置函數(shù)fseek用于在一個(gè)打開的文件中重新定位文件的位置指針,如果成功返回結(jié)果0,否則返回非0值,在不能探尋的設(shè)備上返回的結(jié)果是不定的。其函數(shù)原型為:
intfseek(FILE*stream,longoffset,intorigin);//fseek(文件指針,偏移量,起始位置);起始位置參量origin的取值范圍必須是如下的宏名或隨后具體的常數(shù),含義為: #defineSEEK_CUR1//文件當(dāng)前位置 #defineSEEK_END2//文件結(jié)束位置 #defineSEEK_SET0//文件開始位置
422.fseek函數(shù)探尋文件的位置42fseek函數(shù)在stream形參所對(duì)應(yīng)的文件中運(yùn)作,將其中的位置指針變動(dòng)到新的位置,新的位置由offset算定。偏移量參量offset指出距離origin起始位置的字節(jié)偏移數(shù),正的long型實(shí)參表示以起始位置為基準(zhǔn)前移offset個(gè)字節(jié)作為新的位置,負(fù)的實(shí)參則后移。 在流上的下一回合操作以新的位置為基準(zhǔn),一般可安全地用于二進(jìn)制文件。 fseek函數(shù)操作文本文件的結(jié)果漂移于回車換行次數(shù)的不確定性。43fseek函數(shù)在stream形參所對(duì)應(yīng)的文件3.rewind函數(shù)反繞到文件開頭位置rewind函數(shù)原型為:
voidrewind(FILE*stream); 函數(shù)rewind重新定位與stream關(guān)聯(lián)的位置指針到文件的開頭。函數(shù)調(diào)用[rewind(stream);]近似于:(void)fseek(stream,0L,SEEK_SET);但不象fseek,函數(shù)rewind清除文件結(jié)束符和stream的出錯(cuò)標(biāo)記。443.rewind函數(shù)反繞到文件開頭位置44九、一個(gè)簡(jiǎn)單的讀寫存盤程序步驟 讀寫存盤操作是程序設(shè)計(jì)中的重要工作,程序的讀寫操作主要包含如下步驟和特點(diǎn):
1.構(gòu)筑待存盤操作的數(shù)據(jù)結(jié)構(gòu),不同的數(shù)據(jù)結(jié)構(gòu)對(duì)應(yīng)不同的函數(shù);
2.明晰數(shù)據(jù)的來(lái)源和走向,屏幕操作利用格式轉(zhuǎn)換函數(shù)以進(jìn)行字符處理;
3.格式化輸出一般用于顯示數(shù)據(jù),格式化磁盤輸入常嚴(yán)格呼應(yīng)格式化輸出函數(shù);
4.非格式化函數(shù)直接在內(nèi)存和磁盤之間輸送數(shù)據(jù)無(wú)需信息轉(zhuǎn)換.45九、一個(gè)簡(jiǎn)單的讀寫存盤程序步驟45一、文本流和二進(jìn)制流二、流文件三、文件的打開函數(shù)fopen和關(guān)閉函數(shù)fclose四、格式讀寫fprintf和fscanf函數(shù)五、出錯(cuò)測(cè)試或清除函(feof,ferror,clearerr)第13章文件46一、文本流和二進(jìn)制流第13章文件1一、文本流和二進(jìn)制流內(nèi)存中的信息會(huì)由于程序運(yùn)行的結(jié)束而消失。程序運(yùn)行的結(jié)果需要另外穩(wěn)定的介質(zhì)加以永久保存,這種可以長(zhǎng)期保留數(shù)據(jù)的存儲(chǔ)設(shè)備稱為磁盤文件。下面幾種是有影響的存儲(chǔ)方式:
1.ANSIC運(yùn)行庫(kù)緩沖流的輸出輸出操作
2.C運(yùn)行庫(kù)低級(jí)輸出輸出操作
3.iotream類提供的I/O操作
4.DOS或WINDOWSAPI端口操作5.MicrosoftFoundation類庫(kù)的文件操作
47一、文本流和二進(jìn)制流2在C/C++中流可分為兩類:
1)文本流(textstream);1)二進(jìn)制流(binarystream)文本流中的數(shù)據(jù)以字符形式出現(xiàn),文本以行作為結(jié)束。
圖數(shù)據(jù)的流入流出是一個(gè)相對(duì)概念
流入cout<<b輸出輸入cin>>a流入
磁盤
內(nèi)存緩沖區(qū)
內(nèi)存數(shù)據(jù)區(qū)
鍵盤stdinstdout顯示器stderr打印機(jī)stdprn48在C/C++中流可分為兩類:圖數(shù)據(jù)的流入流出是一個(gè)二、流文件流文件是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)的非緩沖區(qū)的文件代號(hào)一并羅列如下:
硬件設(shè)備預(yù)定義的流文件或流對(duì)象設(shè)備代號(hào)或句柄鍵盤(標(biāo)準(zhǔn)輸入)stdincin0顯示器(標(biāo)準(zhǔn)輸出)stdoutcout1顯示器(標(biāo)準(zhǔn)錯(cuò)誤)stderrcerr2串行口(標(biāo)準(zhǔn)輔助)stdaux3打印機(jī)(標(biāo)準(zhǔn)打?。﹕tdprnclog449二、流文件4描述流文件的FILE數(shù)據(jù)結(jié)構(gòu)隨編譯器版本的不同而相異,下面的描述摘自微軟VC6.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_flag;//4文件操作模式標(biāo)記int_file;//5文件的代號(hào)int_charbuf;//6字符緩沖信息int_bufsiz;//7緩沖區(qū)大小char*_tmpfname;//8臨時(shí)文件名};typedefstruct_iobufFILE;50描述流文件的FILE數(shù)據(jù)結(jié)構(gòu)隨編譯器版本的對(duì)于該結(jié)構(gòu)軟件供應(yīng)商并未逐一指明其中每一數(shù)據(jù)成員的詳細(xì)含義,標(biāo)準(zhǔn)輸入輸出函數(shù)的用戶不要冒然直接去操作其中的成員,而通過(guò)相應(yīng)的函數(shù)間接進(jìn)行。 三個(gè)預(yù)定義的流文件在vc6.0的stdio.h中通過(guò)通過(guò)外部說(shuō)明語(yǔ)句和宏:
externFILE_iob[]; #definestdin(&_iob[0]) #definestdout(&_iob[1]) #definestderr(&_iob[2]) 就已經(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)存分配和釋放工作。51對(duì)于該結(jié)構(gòu)軟件供應(yīng)商并未逐一指明其中每一數(shù)據(jù)成三、文件的打開函數(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(constchar*filename,constchar*mode);函數(shù)返回一個(gè)指向堆空間的FILE*型的流文件指針。不如確切地說(shuō)該函數(shù)在堆空間誕生了一個(gè)FILE型結(jié)構(gòu)變量。52三、文件的打開函數(shù)fopen和關(guān)閉函數(shù)fclose7兩個(gè)constchar*型的入口參數(shù)對(duì)上面的結(jié)構(gòu)成員執(zhí)行了部分初始化賦值。第一個(gè)參數(shù)filename是定位磁盤文件路徑的文件名,該文件名通常是雙引號(hào)括起來(lái)的只讀字符串。在使用含路徑的文件名時(shí),注意“\”的使用,對(duì)于硬盤中的文件d:\mydocu_1\ex.cpp應(yīng)寫成“d:\\mydocu_1\\ex1.cpp”或進(jìn)行如下的初始賦值:constchar*filename="d:\\mydocu_1\\ex1.cpp"; 第二個(gè)以只讀字符串的形式出現(xiàn)的參數(shù)mode,界定文件訪問(wèn)操作的模式。(其有效的取值組合和含義見下一頁(yè))53兩個(gè)constchar*型的入口參數(shù)對(duì)上mode含義"r"以readonly方式打開一個(gè)文本文件,如果輸入文件不存在或未找到fopen失敗"w"以writeonly方式打開一個(gè)文本文件,如果輸出文件已存在,內(nèi)容將全覆蓋"a"以寫和append方式在文本文件末尾追加,如果它不存在則先建立該文件"r+"以讀或?qū)懙姆绞酱蜷_一個(gè)必須已經(jīng)存在的文本文件"w+"以讀或?qū)懙姆绞酱蜷_一個(gè)空文件,如果給定的文件名存在原來(lái)的內(nèi)容將被沖洗"a+"以讀/寫和追加方式打開文件,如果該文件不存在則先建立它54mode含義9"rb"以只讀方式打開一個(gè)binary輸入文件,如果文件不存在或未找到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)制文件,如果該文件不存在則先建立它55"rb"以只讀方式打開一個(gè)binary輸指定文件的缺省操作類型取決于一個(gè)全局變量_fmode,vc6.0里在頭文件stdlib.h中聲明為[externint_fmode;],系統(tǒng)設(shè)置的默認(rèn)值是文本方式即:_fmode=O_TEXT=0x4000如果從文本方式切換為二進(jìn)制模式,可以在程序中令:_fmode=O_BINARY;如果在打開文件發(fā)生錯(cuò)誤,則fopen都返回NULL即0,其潛在的原因有:
a.以讀模式打開一個(gè)并不存在的文件
b.打開一個(gè)無(wú)權(quán)操作的文件(如該文件已標(biāo)明只讀或隱藏屬性試圖寫追加打開)
c.以追加方式對(duì)文件操作但磁盤空間不足56指定文件的缺省操作類型取決于一個(gè)全局變量2.文件的關(guān)閉函數(shù)fclose函數(shù)fclose專用于釋放由函數(shù)fopen申請(qǐng)的堆空間,及時(shí)完成緩沖區(qū)數(shù)據(jù)的到位。fclose的函數(shù)原型為:
intfclose(FILE*fp);fclose的函數(shù)原型為:intfclose(FILE*fp);其中入口形參匹配函數(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)的堆空間。572.文件的關(guān)閉函數(shù)fclose12四、格式讀寫fprintf和fscanf函數(shù)
1.fprintf輸出函數(shù)fprintf輸出函數(shù)的一般形式為:
intfprintf(FILE*pTarget,constchar*format,argument_list); intfprintf(流文件的目的地,格式控制串,參量列表);
fprintf函數(shù)格式控制串與printf中的相同。將fprintf的第一個(gè)形參pTarget取為實(shí)參stdout,其調(diào)用格式相當(dāng)于printf函數(shù)。即
fprintf(stdout,格式控制串,參量列表);
相當(dāng)于:printf(格式控制串,參量列表);
58四、格式讀寫fprintf和fscanf函數(shù)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);fprintf(流文件目的地,格式控制串,變量列表);59在使用fprintf將內(nèi)存數(shù)據(jù)寫到磁盤文件之2.fscanf輸入函數(shù)fscanf函數(shù)的一般形式為:
intfscanf(FILE*pSource,constchar*format,address_list); intfscanf(流文件的來(lái)源處,格式控制串,變量的地址列表);將fscanf的第一個(gè)形參pSource實(shí)參化為stdin,其調(diào)用格式相當(dāng)于scanf函數(shù)。即:
fscanf(stdin,格式控制串,變量地址1,變量地址2....變量地址n);相當(dāng)于:
scanf(格式控制串,變量地址1,變量地址2....變量地址n);
602.fscanf輸入函數(shù)15在調(diào)用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);61在調(diào)用fscanf函數(shù)將磁盤源文件中的數(shù)據(jù)送到[例]格式轉(zhuǎn)換處理一個(gè)結(jié)構(gòu)變量.#include<stdio.h>typedefstructSData{intnLineset;floatfAdjust;intnPoint; floatfXa; floatfYa; floatfZa; }CData;voidOutputData(constchar*filename,constCData&d) {FILE*fp=fopen(filename,"w");
fprintf(fp,"%d,%f,%d\n",d.nLineset,d.fAdjust,d.nPoint);//1 fprintf(fp,"%f,%f,%f\n",d.fXa,d.fYa,d.fZa);//2 fclose(fp); }62[例]格式轉(zhuǎn)換處理一個(gè)結(jié)構(gòu)變量.17voidInputData(constchar*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);} 6318voidmain(void){CDatas={1,2,3,4,5,6};OutputData("c:\\sdata.out",s);CDatad;InputData("c:\\sdata.out",d);OutputData("c:\\cdata.out",d); }在文件c:\cdata.out中輸出結(jié)果為:1,2.000000,34.000000,5.000000,6.000000在文件c:\sdata.out中輸出結(jié)果為:1,2.000000,34.000000,5.000000,6.00000064voidmain(void)19五、出錯(cuò)測(cè)試或清除函(feof,ferror,clearerr)1.feof函數(shù)測(cè)試文件結(jié)束標(biāo)志feof函數(shù)的原型為:
intfeof(FILE*stream);該函數(shù)的調(diào)用格式常為:
while(!feof(stream))讀寫循環(huán)體;2.ferror函數(shù)測(cè)試流中的錯(cuò)誤ferror函數(shù)的原型為:
intferror(FILE*stream);3.clearerr函數(shù)清除錯(cuò)誤標(biāo)志為0 clearerr函數(shù)原型為:
[voidclearerr(FILE*stream);]65五、出錯(cuò)測(cè)試或清除函(feof,ferror,clearer
六、字符和字符串讀寫函數(shù)
七、無(wú)格式轉(zhuǎn)換的讀寫函數(shù)fread和fwrite
八、文件的定位
九、一個(gè)簡(jiǎn)單的讀寫存盤程序步驟第13章文件66第13章文件21六、字符和字符串讀寫函數(shù)
1.讀取單個(gè)字符的fgetc函數(shù)
fgetc函數(shù)的原型為:intfgetc(FILE*pSrcFile);
FILE*型的入口形參指明讀取操作的來(lái)源,實(shí)參匹配fopen打開的磁盤文件或stdin。該函數(shù)從磁盤文件的當(dāng)前位置讀取一個(gè)字符,定位源磁盤文件的位置指針向后移動(dòng)一個(gè)字節(jié)。如果該指針到達(dá)文件末尾,fgetc函數(shù)返回EOF。
注意例程getc與函數(shù)fgetc作用相同但可以作為函數(shù)和宏出現(xiàn)。getchar()例程與getc(stdin)一致,亦可以作為函數(shù)和宏出現(xiàn)。67六、字符和字符串讀寫函數(shù)22[例]fgetc.cpp#include<stdio.h>voidmain(void){FILE*fpGet=fopen("fgetc.cpp","r"); if(fpGet==NULL){printf("fopenfailed\n");return;}inti=0; charbuffer[512]; while(feof(fpGet)==0&&i<512)buffer[i++]=fgetc(fpGet); buffer[i]='\0'; printf("%s\n",buffer); //fclose(fpGet); }//程序運(yùn)行的結(jié)果顯示fgetc.cpp在屏幕上68[例]fgetc.cpp232.存寫單個(gè)字符的fputc函數(shù)fputc函數(shù)的原型為:intfputc(intch,FILE*pDstFile);fputc函數(shù)的第一個(gè)形參ch正是要存寫到第二個(gè)形參pDstFile關(guān)聯(lián)的磁盤文件中去的字符,該函數(shù)返回第一個(gè)入口形參的實(shí)參值。pDstFile匹配一個(gè)fopen返回的流文件指針或stdout,調(diào)用失敗返回EOF。692.存寫單個(gè)字符的fputc函數(shù)24[例]fputc.cpp#include<stdio.h>voidmain(void){FILE*fpGet=fopen("fputc.cpp","r");if(fpGet==NULL){printf("fopenfailed\n");return;}FILE*fpPut=fopen("fputc.xpp","w"); if(fpPut==NULL){printf("fop
溫馨提示
- 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度門店合伙人激勵(lì)機(jī)制服務(wù)合同4篇
- 2025年度二零二五農(nóng)行個(gè)人二手房交易貸款合同2篇
- 2025年度綠色建筑節(jié)能改造工程合同(二零二五版)4篇
- 二零二五年度商業(yè)門面租賃合同范本-@-1
- 2025年度綠色生態(tài)餐廳檔口租賃合同樣本4篇
- 2025年度城市軌道交通鋼管材料供應(yīng)與承包合同協(xié)議書范本
- 2025版南海區(qū)創(chuàng)新創(chuàng)業(yè)人才居住就業(yè)支持合同4篇
- 2025版門面租賃合同消防安全及責(zé)任承擔(dān)4篇
- 二零二五年度外賣送餐服務(wù)合同書(含增值服務(wù))
- 二零二五年度年薪制工資與員工晉升合同模板
- 衛(wèi)生服務(wù)個(gè)人基本信息表
- 醫(yī)學(xué)脂質(zhì)的構(gòu)成功能及分析專題課件
- 高技能人才培養(yǎng)的策略創(chuàng)新與實(shí)踐路徑
- 廣東省湛江市廉江市2023-2024學(xué)年八年級(jí)上學(xué)期期末考試數(shù)學(xué)試卷(含答案)
- 2024年湖北省知名中小學(xué)教聯(lián)體聯(lián)盟中考語(yǔ)文一模試卷
- 安徽省蕪湖市2023-2024學(xué)年高一上學(xué)期期末考試 生物 含解析
- 交叉口同向可變車道動(dòng)態(tài)控制與信號(hào)配時(shí)優(yōu)化研究
- 燃?xì)庑袠I(yè)有限空間作業(yè)安全管理制度
- 數(shù)列練習(xí)題(含答案)基礎(chǔ)知識(shí)點(diǎn)
- 人教版(2024新版)七年級(jí)上冊(cè)英語(yǔ)期中+期末學(xué)業(yè)質(zhì)量測(cè)試卷 2套(含答案)
- 通用電子嘉賓禮薄
評(píng)論
0/150
提交評(píng)論