




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
本章學(xué)習(xí)內(nèi)容
二進(jìn)制文件和文本文件
文件的打開(kāi)和關(guān)閉文件的順序讀寫(xiě)與隨機(jī)讀寫(xiě)
標(biāo)準(zhǔn)輸入輸出及其重定向第1頁(yè)/共40頁(yè)VonJ.NeumannArchitecture輸入/輸出設(shè)備存儲(chǔ)器運(yùn)算器控制器程序和輸入數(shù)據(jù)輸出結(jié)果取出數(shù)據(jù)存入數(shù)據(jù)操作命令存取命令取出程序指令輸入輸出命令計(jì)算結(jié)果CPU大腦記憶裝置(Memory)眼睛和耳朵(I/Odevices)Wheretoputdataincomputer?
Howtoinputoroutputdata?
第2頁(yè)/共40頁(yè)I/O設(shè)備輸入設(shè)備鍵盤(pán)、鼠標(biāo)軟盤(pán)、硬盤(pán)、光驅(qū)(以文件的形式)掃描儀、視頻采集卡、電視卡、游戲桿、話筒……輸出設(shè)備顯示器、打印機(jī)軟盤(pán)、硬盤(pán)、CD/DVD-RW(以文件的形式)音箱……單純的輸入設(shè)備或者單純的輸出設(shè)備越來(lái)越少第3頁(yè)/共40頁(yè)標(biāo)準(zhǔn)輸入/輸出字符界面的操作系統(tǒng)一般都提供標(biāo)準(zhǔn)輸入與輸出設(shè)備DOS、Linux、UNIX…一般情況,標(biāo)準(zhǔn)輸入就是鍵盤(pán),標(biāo)準(zhǔn)輸出就是終端顯示器操作系統(tǒng)有能力重定向標(biāo)準(zhǔn)輸入與輸出,比如讓文件作為標(biāo)準(zhǔn)輸入(標(biāo)準(zhǔn)輸出)這種重定向程序本身是感覺(jué)不到的自來(lái)水廠第4頁(yè)/共40頁(yè)DOS下的標(biāo)準(zhǔn)輸入/輸出重定向程序prog如下main()
{
charc;
while((c=getchar())!='\n')
putchar(++c);
}輸入重定向prog<infile.txt輸出重定向prog>outfile.txt第5頁(yè)/共40頁(yè)流(Stream)計(jì)算機(jī)中的流的概念一般稱為數(shù)據(jù)流,也叫做字節(jié)流、比特流Filestream(文件流),Videostream(視頻流)andAudiostream(音頻流)inspecificfield.
可以倒流的數(shù)據(jù)流如果你想重新讀已經(jīng)讀過(guò)的數(shù)據(jù),或者要修改已經(jīng)寫(xiě)入的數(shù)據(jù),可以發(fā)出流控(FlowControl)命令不會(huì)倒流的數(shù)據(jù)流也很多網(wǎng)絡(luò)上的數(shù)據(jù)流。網(wǎng)絡(luò)和數(shù)據(jù)線等介質(zhì)只有很小的數(shù)據(jù)緩沖區(qū),沒(méi)有大量存儲(chǔ)的能力流的載體?磁盤(pán)文件、終端顯示器或打印機(jī)、存儲(chǔ)器等第6頁(yè)/共40頁(yè)外存內(nèi)存容易健忘,所以數(shù)據(jù)必須保存在“不健忘”的外存上磁盤(pán)(MagneticDisks)光盤(pán)(CD、DVD)U盤(pán)(FlashMemory)......容量大、斷電后數(shù)據(jù)不丟失,可重復(fù)使用,永久保存一般都以文件的形式給用戶及應(yīng)用程序使用第7頁(yè)/共40頁(yè)文件(File)文件一般指存儲(chǔ)在外部介質(zhì)上有名字的一組相關(guān)數(shù)據(jù)的集合用文件可長(zhǎng)期保存數(shù)據(jù),實(shí)現(xiàn)數(shù)據(jù)共享在C語(yǔ)言中,文件可泛指磁盤(pán)文件、終端顯示器或打印機(jī)……程序中的文件在程序運(yùn)行時(shí)由程序在磁盤(pán)上建立一個(gè)文件,通過(guò)寫(xiě)操作將數(shù)據(jù)存入該文件由程序打開(kāi)磁盤(pán)上的某個(gè)已有文件,并通過(guò)讀操作將文件中的數(shù)據(jù)讀入內(nèi)存供程序使用第8頁(yè)/共40頁(yè)文件(Files)與流
(Streams)程序通過(guò)文件打開(kāi)操作把流與設(shè)備聯(lián)系起來(lái),文件打開(kāi)后,可在程序和文件之間交換數(shù)據(jù)程序通過(guò)文件關(guān)閉操作斷開(kāi)流與文件的聯(lián)系所有流的性質(zhì)都一樣因?yàn)榱髋c設(shè)備無(wú)關(guān),所以能寫(xiě)入磁盤(pán)文件的同一函數(shù)也能寫(xiě)入另一設(shè)備,如控制臺(tái)終端等文件的能力則不同如磁盤(pán)文件支持隨機(jī)存取,而鍵盤(pán)則不能第9頁(yè)/共40頁(yè)文件的存放(Storage)可以建立若干文件目錄(directory\folder文件夾)在目錄里保存文件同一級(jí)目錄里保存的文件不能同名對(duì)使用者而言,只要知道文件的路徑(path,全目錄)和文件名,就能使用該文件C:\home\Sunner\main.c這都是托OS的福第10頁(yè)/共40頁(yè)13.1二進(jìn)制文件和文本文件
文件的類型(TypeofFiles)?二進(jìn)制文件是一種字節(jié)序列,沒(méi)有字符變換按照數(shù)據(jù)在內(nèi)存中的存儲(chǔ)形式(二進(jìn)制)存儲(chǔ)到文件如整數(shù)123,在內(nèi)存占2個(gè)字節(jié),則文件中也占2個(gè)字節(jié)文本文件/ASCII碼文件是一種字符序列,文件中存儲(chǔ)每個(gè)字符的ASCII碼如整數(shù)123在文件中占3個(gè)字節(jié),分別存放這3個(gè)字符的ASCII碼如果存1234呢?第11頁(yè)/共40頁(yè)文件的格式(FormatofFiles)數(shù)據(jù)必須按照存入的類型讀出,才能恢復(fù)其本來(lái)面貌公開(kāi)的標(biāo)準(zhǔn)格式如bmp、tif、gif、jpg和mp3等類型的文件,有大量軟件能生成和使用這些類型的文件不公開(kāi)或加密的文件格式如MicrosoftWord的doc格式就不公開(kāi),所以至今沒(méi)有Word以外的其他軟件能完美地讀出doc文件
第12頁(yè)/共40頁(yè)緩沖型和非緩沖型文件系統(tǒng)
緩沖型文件系統(tǒng)指系統(tǒng)自動(dòng)在內(nèi)存中為每一個(gè)正在使用的文件開(kāi)辟一個(gè)緩沖區(qū),在讀寫(xiě)文件時(shí),數(shù)據(jù)先送到緩沖區(qū),再傳給C程序或外存上緩沖文型件系統(tǒng)利用文件指針標(biāo)識(shí)文件緩沖型文件系統(tǒng)中的文件操作,也稱高級(jí)文件操作高級(jí)文件操作函數(shù)是ANSIC定義的文件操作函數(shù),具有跨平臺(tái)和可移植的能力非緩沖型文件系統(tǒng)不會(huì)自動(dòng)設(shè)置文件緩沖區(qū),緩沖區(qū)需由程序員自己設(shè)定非緩沖型文件系統(tǒng)沒(méi)有文件指針,它使用稱為文件號(hào)的整數(shù)來(lái)標(biāo)識(shí)文件第13頁(yè)/共40頁(yè)13.2文件的打開(kāi)和關(guān)閉下面介紹的函數(shù)均定義在<stdio.h>中FILE*fopen(const
char*filename,const
char*mode);FILE*fp=fopen("C:\\CONFIG.SYS","rw");filename是文件名包含路徑。如果不含路徑,表示打開(kāi)當(dāng)前目錄下的文件mode是打開(kāi)方式常用為"r"、"w"、"rw"和"a",分別表示只讀、只寫(xiě)、讀寫(xiě)和添加"rb"表示只讀二進(jìn)制文件返回值為指向此文件的指針,留待以后使用如果打開(kāi)失敗,返回值為NULL第14頁(yè)/共40頁(yè)文件打開(kāi)方式(mode):對(duì)應(yīng)二進(jìn)制文件對(duì)應(yīng)文本文件“r”
只讀必須是已存在的文件“w”
只寫(xiě)不論該文件是否存在,都新建一個(gè)文件“a”
追加向文本文件尾增加數(shù)據(jù),該文件必須存在“r+”
讀寫(xiě)打開(kāi)一個(gè)已存在的文件,用于讀寫(xiě)“w+”讀寫(xiě)建立一個(gè)新文件,可讀可寫(xiě)“a+”
讀寫(xiě)向文件尾追加數(shù)據(jù),也可讀“rb”
“wb”“ab”“rb+”“wb+”“ab+”第15頁(yè)/共40頁(yè)文件指針(FilePointer)FILE
*fp;是FILE型指針變量,標(biāo)識(shí)一個(gè)特定的磁盤(pán)文件與文件相關(guān)聯(lián)的每個(gè)流都有一個(gè)FILE類型的控制結(jié)構(gòu),定義有關(guān)文件操作的信息,用戶絕對(duì)不應(yīng)修改typedef
struct{
shortlevel;/*緩沖區(qū)‘滿’或‘空’的程度*/
unsignedflags;/*文件狀態(tài)標(biāo)志*/
charfd;/*文件描述符*/
unsignedcharhold;/*如無(wú)緩沖區(qū)不讀字符*/
shortbsize;/*緩沖區(qū)的大小*/
unsignedchar*buffer;/*數(shù)據(jù)緩沖區(qū)的位置*/
unsignedchar*curp;/*指針當(dāng)前的指向*/
unsignedistemp;/*臨時(shí)文件指示器*/
shorttoken;/*用于有效性檢查*/}FILE;/*在stdio.h文件中定義*/第16頁(yè)/共40頁(yè)13.2文件的打開(kāi)和關(guān)閉intfclose(FILE*fp);把遺留在緩沖區(qū)中的數(shù)據(jù)寫(xiě)入文件,實(shí)施操作系統(tǒng)級(jí)的關(guān)閉操作同時(shí),釋放與流聯(lián)系的文件控制塊,以后可以重復(fù)使用這部分空間多數(shù)情況下,系統(tǒng)限制同時(shí)處于打開(kāi)狀態(tài)的文件總數(shù),因此,打開(kāi)文件前先關(guān)閉無(wú)用文件是必要的fclose函數(shù)的返回值當(dāng)順利地執(zhí)行了關(guān)閉操作,返回值為0如果返回值為非零值,表示關(guān)閉時(shí)有錯(cuò)誤一般只有驅(qū)動(dòng)器中無(wú)盤(pán)或盤(pán)空間不夠時(shí)才失敗,關(guān)閉失敗會(huì)引起數(shù)據(jù)丟失、文件的破壞和程序中的隨機(jī)錯(cuò)誤第17頁(yè)/共40頁(yè)13.3按字符讀寫(xiě)文件字符讀寫(xiě)intfgetc(FILE*fp);從fp讀出一個(gè)字符,將位置指針指向下一個(gè)字符若讀成功,則返回該字符,若讀到文件尾,則返回EOF(EOF是一個(gè)符號(hào)常量,在stdio.h中定義為-1)intfputc(intc,FILE*fp);向fp輸出字符c若寫(xiě)入錯(cuò)誤,則返回EOF,否則返回c第18頁(yè)/共40頁(yè)13.3按字符讀寫(xiě)文件【例13.1】從鍵盤(pán)輸入一串字符,轉(zhuǎn)存到磁盤(pán)文件上為什么要判斷文件打開(kāi)是否成功呢?第19頁(yè)/共40頁(yè)
【例13.2】將0~127之間的ASCII字符寫(xiě)到文件中,然后從文件中讀出并顯示到屏幕上函數(shù)feof()檢查是否到達(dá)文件尾,當(dāng)文件位置指針指向文件尾時(shí),返回非0值,否則返回0值第20頁(yè)/共40頁(yè)【例13.3】修改例13.2,從文件中讀出字符時(shí),判斷是否為可打印字符,若是則顯示該字符,否則顯示其十進(jìn)制ASCII碼值第21頁(yè)/共40頁(yè)【例13.3】修改例13.2,從文件中讀出字符時(shí),判斷是否為可打印字符,若是則顯示該字符,否則顯示其十進(jìn)制ASCII碼值為什么在輸出第128個(gè)字符的ASCII碼值后又輸出了一個(gè)-1呢?第22頁(yè)/共40頁(yè)【例13.3】修改例13.2,從文件中讀出字符時(shí),判斷是否為可打印字符,若是則顯示該字符,否則顯示其十進(jìn)制ASCII碼值為什么在輸出第128個(gè)字符的ASCII碼值后又輸出了一個(gè)-1呢?使用函數(shù)feof()時(shí),僅當(dāng)讀到文件結(jié)束符時(shí)才能判斷出到達(dá)文件尾,而文件結(jié)束符是一個(gè)值為-1的不可打印的控制字符if(!iscntrl(ch))
第23頁(yè)/共40頁(yè)13.3按字符讀寫(xiě)文件字符串讀寫(xiě)char*fgets(char*s,intn,FILE*fp);從fp所指的文件中讀取字符串并在字符串末尾添加'\0',然后存入s,最多讀n-1個(gè)字符當(dāng)讀到回車換行符、文件末尾或讀滿n-1個(gè)字符時(shí),函數(shù)返回該字符串的首地址特例:fgets(buf,sizeof(buf),stdin);intfputs(const
char*s,FILE*fp);將字符串寫(xiě)入文件中若出現(xiàn)寫(xiě)入錯(cuò)誤,則返回EOF,否則返回一個(gè)非負(fù)數(shù)第24頁(yè)/共40頁(yè)13.3按字符讀寫(xiě)文件
【例13.4】用fgets()改寫(xiě)例13.1程序,從鍵盤(pán)輸入一串字符,添加到文本文件demo.txt的末尾。假設(shè)文本文件demo.txt中已有內(nèi)容為:Iamastudent.第25頁(yè)/共40頁(yè)13.4按格式讀寫(xiě)文件格式化讀寫(xiě)intfscanf(FILE*fp,const
char*format,...);fscanf(fp,"%d,%6.2f",&i,&t);第1個(gè)參數(shù)為文件指針,第2個(gè)參數(shù)為格式控制參數(shù),第3個(gè)參數(shù)為地址參數(shù)表列intfprintf(FILE*fp,const
char*format,...);fprintf(fp,"%d,%6.2f",i,t);第1個(gè)參數(shù)為文件指針,第2個(gè)參數(shù)為格式控制參數(shù),第3個(gè)參數(shù)為輸出參數(shù)表列第26頁(yè)/共40頁(yè)將平均分作為STUDENT結(jié)構(gòu)體的成員,使函數(shù)的接口更簡(jiǎn)潔
【例13.5】修改例12.7程序,計(jì)算每個(gè)學(xué)生的4門(mén)課程的平均分,將學(xué)生的各科成績(jī)及平均分輸出到文件score.txt中第27頁(yè)/共40頁(yè)
【例13.5】修改例12.7程序,計(jì)算每個(gè)學(xué)生的4門(mén)課程的平均分,將學(xué)生的各科成績(jī)及平均分輸出到文件score.txt中第28頁(yè)/共40頁(yè)
【例13.5】修改例12.7程序,計(jì)算每個(gè)學(xué)生的4門(mén)課程的平均分,將學(xué)生的各科成績(jī)及平均分輸出到文件score.txt中第29頁(yè)/共40頁(yè)
【例13.5】修改例12.7程序,計(jì)算每個(gè)學(xué)生的4門(mén)課程的平均分,將學(xué)生的各科成績(jī)及平均分輸出到文件score.txt中第30頁(yè)/共40頁(yè)
【例13.6】在例13.5基礎(chǔ)上,從文件score.txt中讀出每個(gè)學(xué)生的4門(mén)課的平均分,各科成績(jī)及平均分第31頁(yè)/共40頁(yè)
【例13.6】在例13.5基礎(chǔ)上,從文件score.txt中讀出每個(gè)學(xué)生的4門(mén)課的平均分,各科成績(jī)及平均分第32頁(yè)/共40頁(yè)13.5按數(shù)據(jù)塊讀寫(xiě)文件按數(shù)據(jù)塊讀寫(xiě)從fp所指的文件中讀取數(shù)據(jù)塊并存儲(chǔ)到buffer指向的內(nèi)存中buffer是待讀入數(shù)塊據(jù)的起始地址size是每個(gè)數(shù)據(jù)塊的大小(待讀入的每個(gè)數(shù)據(jù)塊的字節(jié)數(shù))count是最多允許讀取的數(shù)據(jù)塊個(gè)數(shù)(每個(gè)數(shù)據(jù)塊size個(gè)字節(jié))返回實(shí)際讀到的數(shù)據(jù)塊個(gè)數(shù)將buffer指向的內(nèi)存中的數(shù)據(jù)塊寫(xiě)入fp所指的文件第33頁(yè)/共40頁(yè)
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 針對(duì)蘋(píng)果種植農(nóng)戶的問(wèn)卷調(diào)查
- 雪松搬遷施工方案
- 固話地坪施工方案
- 筏板基礎(chǔ)專項(xiàng)施工方案
- 6年級(jí)下冊(cè)英語(yǔ)譯林版第二單元小課文
- 6-9歲兒童蛋白質(zhì)的標(biāo)準(zhǔn)
- 低溫下簡(jiǎn)支梁缺口沖擊強(qiáng)度
- 溫州工程拆除施工方案
- c25混凝土受凍臨界強(qiáng)度
- 地上物 苗木補(bǔ)償標(biāo)準(zhǔn)
- 《設(shè)計(jì)師工作經(jīng)歷證明范本》
- 高中生升學(xué)就業(yè)指導(dǎo)模板
- 某某市“鄉(xiāng)村振興”行動(dòng)項(xiàng)目-可行性研究報(bào)告
- 麻風(fēng)病防治知識(shí)課件
- 2024年代持法人股東協(xié)議書(shū)模板
- 學(xué)校食堂消毒記錄
- 高中音樂(lè)第二篇:《黃河大合唱》教案
- 企業(yè)天使輪融資商業(yè)方案模板
- 2024太陽(yáng)能光伏組件技術(shù)規(guī)范
- 潮汕英歌舞文化傳承與創(chuàng)新研究
- 2025年高考作文素材積累:17則熱聞(新聞+觀點(diǎn)+運(yùn)用)及人民日?qǐng)?bào)18篇時(shí)評(píng)
評(píng)論
0/150
提交評(píng)論