版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
本章學(xué)習(xí)內(nèi)容
二進制文件和文本文件
文件的打開和關(guān)閉文件的順序讀寫與隨機讀寫
標準輸入輸出及其重定向第1頁/共40頁VonJ.NeumannArchitecture輸入/輸出設(shè)備存儲器運算器控制器程序和輸入數(shù)據(jù)輸出結(jié)果取出數(shù)據(jù)存入數(shù)據(jù)操作命令存取命令取出程序指令輸入輸出命令計算結(jié)果CPU大腦記憶裝置(Memory)眼睛和耳朵(I/Odevices)Wheretoputdataincomputer?
Howtoinputoroutputdata?
第2頁/共40頁I/O設(shè)備輸入設(shè)備鍵盤、鼠標軟盤、硬盤、光驅(qū)(以文件的形式)掃描儀、視頻采集卡、電視卡、游戲桿、話筒……輸出設(shè)備顯示器、打印機軟盤、硬盤、CD/DVD-RW(以文件的形式)音箱……單純的輸入設(shè)備或者單純的輸出設(shè)備越來越少第3頁/共40頁標準輸入/輸出字符界面的操作系統(tǒng)一般都提供標準輸入與輸出設(shè)備DOS、Linux、UNIX…一般情況,標準輸入就是鍵盤,標準輸出就是終端顯示器操作系統(tǒng)有能力重定向標準輸入與輸出,比如讓文件作為標準輸入(標準輸出)這種重定向程序本身是感覺不到的自來水廠第4頁/共40頁DOS下的標準輸入/輸出重定向程序prog如下main()
{
charc;
while((c=getchar())!='\n')
putchar(++c);
}輸入重定向prog<infile.txt輸出重定向prog>outfile.txt第5頁/共40頁流(Stream)計算機中的流的概念一般稱為數(shù)據(jù)流,也叫做字節(jié)流、比特流Filestream(文件流),Videostream(視頻流)andAudiostream(音頻流)inspecificfield.
可以倒流的數(shù)據(jù)流如果你想重新讀已經(jīng)讀過的數(shù)據(jù),或者要修改已經(jīng)寫入的數(shù)據(jù),可以發(fā)出流控(FlowControl)命令不會倒流的數(shù)據(jù)流也很多網(wǎng)絡(luò)上的數(shù)據(jù)流。網(wǎng)絡(luò)和數(shù)據(jù)線等介質(zhì)只有很小的數(shù)據(jù)緩沖區(qū),沒有大量存儲的能力流的載體?磁盤文件、終端顯示器或打印機、存儲器等第6頁/共40頁外存內(nèi)存容易健忘,所以數(shù)據(jù)必須保存在“不健忘”的外存上磁盤(MagneticDisks)光盤(CD、DVD)U盤(FlashMemory)......容量大、斷電后數(shù)據(jù)不丟失,可重復(fù)使用,永久保存一般都以文件的形式給用戶及應(yīng)用程序使用第7頁/共40頁文件(File)文件一般指存儲在外部介質(zhì)上有名字的一組相關(guān)數(shù)據(jù)的集合用文件可長期保存數(shù)據(jù),實現(xiàn)數(shù)據(jù)共享在C語言中,文件可泛指磁盤文件、終端顯示器或打印機……程序中的文件在程序運行時由程序在磁盤上建立一個文件,通過寫操作將數(shù)據(jù)存入該文件由程序打開磁盤上的某個已有文件,并通過讀操作將文件中的數(shù)據(jù)讀入內(nèi)存供程序使用第8頁/共40頁文件(Files)與流
(Streams)程序通過文件打開操作把流與設(shè)備聯(lián)系起來,文件打開后,可在程序和文件之間交換數(shù)據(jù)程序通過文件關(guān)閉操作斷開流與文件的聯(lián)系所有流的性質(zhì)都一樣因為流與設(shè)備無關(guān),所以能寫入磁盤文件的同一函數(shù)也能寫入另一設(shè)備,如控制臺終端等文件的能力則不同如磁盤文件支持隨機存取,而鍵盤則不能第9頁/共40頁文件的存放(Storage)可以建立若干文件目錄(directory\folder文件夾)在目錄里保存文件同一級目錄里保存的文件不能同名對使用者而言,只要知道文件的路徑(path,全目錄)和文件名,就能使用該文件C:\home\Sunner\main.c這都是托OS的福第10頁/共40頁13.1二進制文件和文本文件
文件的類型(TypeofFiles)?二進制文件是一種字節(jié)序列,沒有字符變換按照數(shù)據(jù)在內(nèi)存中的存儲形式(二進制)存儲到文件如整數(shù)123,在內(nèi)存占2個字節(jié),則文件中也占2個字節(jié)文本文件/ASCII碼文件是一種字符序列,文件中存儲每個字符的ASCII碼如整數(shù)123在文件中占3個字節(jié),分別存放這3個字符的ASCII碼如果存1234呢?第11頁/共40頁文件的格式(FormatofFiles)數(shù)據(jù)必須按照存入的類型讀出,才能恢復(fù)其本來面貌公開的標準格式如bmp、tif、gif、jpg和mp3等類型的文件,有大量軟件能生成和使用這些類型的文件不公開或加密的文件格式如MicrosoftWord的doc格式就不公開,所以至今沒有Word以外的其他軟件能完美地讀出doc文件
第12頁/共40頁緩沖型和非緩沖型文件系統(tǒng)
緩沖型文件系統(tǒng)指系統(tǒng)自動在內(nèi)存中為每一個正在使用的文件開辟一個緩沖區(qū),在讀寫文件時,數(shù)據(jù)先送到緩沖區(qū),再傳給C程序或外存上緩沖文型件系統(tǒng)利用文件指針標識文件緩沖型文件系統(tǒng)中的文件操作,也稱高級文件操作高級文件操作函數(shù)是ANSIC定義的文件操作函數(shù),具有跨平臺和可移植的能力非緩沖型文件系統(tǒng)不會自動設(shè)置文件緩沖區(qū),緩沖區(qū)需由程序員自己設(shè)定非緩沖型文件系統(tǒng)沒有文件指針,它使用稱為文件號的整數(shù)來標識文件第13頁/共40頁13.2文件的打開和關(guān)閉下面介紹的函數(shù)均定義在<stdio.h>中FILE*fopen(const
char*filename,const
char*mode);FILE*fp=fopen("C:\\CONFIG.SYS","rw");filename是文件名包含路徑。如果不含路徑,表示打開當前目錄下的文件mode是打開方式常用為"r"、"w"、"rw"和"a",分別表示只讀、只寫、讀寫和添加"rb"表示只讀二進制文件返回值為指向此文件的指針,留待以后使用如果打開失敗,返回值為NULL第14頁/共40頁文件打開方式(mode):對應(yīng)二進制文件對應(yīng)文本文件“r”
只讀必須是已存在的文件“w”
只寫不論該文件是否存在,都新建一個文件“a”
追加向文本文件尾增加數(shù)據(jù),該文件必須存在“r+”
讀寫打開一個已存在的文件,用于讀寫“w+”讀寫建立一個新文件,可讀可寫“a+”
讀寫向文件尾追加數(shù)據(jù),也可讀“rb”
“wb”“ab”“rb+”“wb+”“ab+”第15頁/共40頁文件指針(FilePointer)FILE
*fp;是FILE型指針變量,標識一個特定的磁盤文件與文件相關(guān)聯(lián)的每個流都有一個FILE類型的控制結(jié)構(gòu),定義有關(guān)文件操作的信息,用戶絕對不應(yīng)修改typedef
struct{
shortlevel;/*緩沖區(qū)‘滿’或‘空’的程度*/
unsignedflags;/*文件狀態(tài)標志*/
charfd;/*文件描述符*/
unsignedcharhold;/*如無緩沖區(qū)不讀字符*/
shortbsize;/*緩沖區(qū)的大小*/
unsignedchar*buffer;/*數(shù)據(jù)緩沖區(qū)的位置*/
unsignedchar*curp;/*指針當前的指向*/
unsignedistemp;/*臨時文件指示器*/
shorttoken;/*用于有效性檢查*/}FILE;/*在stdio.h文件中定義*/第16頁/共40頁13.2文件的打開和關(guān)閉intfclose(FILE*fp);把遺留在緩沖區(qū)中的數(shù)據(jù)寫入文件,實施操作系統(tǒng)級的關(guān)閉操作同時,釋放與流聯(lián)系的文件控制塊,以后可以重復(fù)使用這部分空間多數(shù)情況下,系統(tǒng)限制同時處于打開狀態(tài)的文件總數(shù),因此,打開文件前先關(guān)閉無用文件是必要的fclose函數(shù)的返回值當順利地執(zhí)行了關(guān)閉操作,返回值為0如果返回值為非零值,表示關(guān)閉時有錯誤一般只有驅(qū)動器中無盤或盤空間不夠時才失敗,關(guān)閉失敗會引起數(shù)據(jù)丟失、文件的破壞和程序中的隨機錯誤第17頁/共40頁13.3按字符讀寫文件字符讀寫intfgetc(FILE*fp);從fp讀出一個字符,將位置指針指向下一個字符若讀成功,則返回該字符,若讀到文件尾,則返回EOF(EOF是一個符號常量,在stdio.h中定義為-1)intfputc(intc,FILE*fp);向fp輸出字符c若寫入錯誤,則返回EOF,否則返回c第18頁/共40頁13.3按字符讀寫文件【例13.1】從鍵盤輸入一串字符,轉(zhuǎn)存到磁盤文件上為什么要判斷文件打開是否成功呢?第19頁/共40頁
【例13.2】將0~127之間的ASCII字符寫到文件中,然后從文件中讀出并顯示到屏幕上函數(shù)feof()檢查是否到達文件尾,當文件位置指針指向文件尾時,返回非0值,否則返回0值第20頁/共40頁【例13.3】修改例13.2,從文件中讀出字符時,判斷是否為可打印字符,若是則顯示該字符,否則顯示其十進制ASCII碼值第21頁/共40頁【例13.3】修改例13.2,從文件中讀出字符時,判斷是否為可打印字符,若是則顯示該字符,否則顯示其十進制ASCII碼值為什么在輸出第128個字符的ASCII碼值后又輸出了一個-1呢?第22頁/共40頁【例13.3】修改例13.2,從文件中讀出字符時,判斷是否為可打印字符,若是則顯示該字符,否則顯示其十進制ASCII碼值為什么在輸出第128個字符的ASCII碼值后又輸出了一個-1呢?使用函數(shù)feof()時,僅當讀到文件結(jié)束符時才能判斷出到達文件尾,而文件結(jié)束符是一個值為-1的不可打印的控制字符if(!iscntrl(ch))
第23頁/共40頁13.3按字符讀寫文件字符串讀寫char*fgets(char*s,intn,FILE*fp);從fp所指的文件中讀取字符串并在字符串末尾添加'\0',然后存入s,最多讀n-1個字符當讀到回車換行符、文件末尾或讀滿n-1個字符時,函數(shù)返回該字符串的首地址特例:fgets(buf,sizeof(buf),stdin);intfputs(const
char*s,FILE*fp);將字符串寫入文件中若出現(xiàn)寫入錯誤,則返回EOF,否則返回一個非負數(shù)第24頁/共40頁13.3按字符讀寫文件
【例13.4】用fgets()改寫例13.1程序,從鍵盤輸入一串字符,添加到文本文件demo.txt的末尾。假設(shè)文本文件demo.txt中已有內(nèi)容為:Iamastudent.第25頁/共40頁13.4按格式讀寫文件格式化讀寫intfscanf(FILE*fp,const
char*format,...);fscanf(fp,"%d,%6.2f",&i,&t);第1個參數(shù)為文件指針,第2個參數(shù)為格式控制參數(shù),第3個參數(shù)為地址參數(shù)表列intfprintf(FILE*fp,const
char*format,...);fprintf(fp,"%d,%6.2f",i,t);第1個參數(shù)為文件指針,第2個參數(shù)為格式控制參數(shù),第3個參數(shù)為輸出參數(shù)表列第26頁/共40頁將平均分作為STUDENT結(jié)構(gòu)體的成員,使函數(shù)的接口更簡潔
【例13.5】修改例12.7程序,計算每個學(xué)生的4門課程的平均分,將學(xué)生的各科成績及平均分輸出到文件score.txt中第27頁/共40頁
【例13.5】修改例12.7程序,計算每個學(xué)生的4門課程的平均分,將學(xué)生的各科成績及平均分輸出到文件score.txt中第28頁/共40頁
【例13.5】修改例12.7程序,計算每個學(xué)生的4門課程的平均分,將學(xué)生的各科成績及平均分輸出到文件score.txt中第29頁/共40頁
【例13.5】修改例12.7程序,計算每個學(xué)生的4門課程的平均分,將學(xué)生的各科成績及平均分輸出到文件score.txt中第30頁/共40頁
【例13.6】在例13.5基礎(chǔ)上,從文件score.txt中讀出每個學(xué)生的4門課的平均分,各科成績及平均分第31頁/共40頁
【例13.6】在例13.5基礎(chǔ)上,從文件score.txt中讀出每個學(xué)生的4門課的平均分,各科成績及平均分第32頁/共40頁13.5按數(shù)據(jù)塊讀寫文件按數(shù)據(jù)塊讀寫從fp所指的文件中讀取數(shù)據(jù)塊并存儲到buffer指向的內(nèi)存中buffer是待讀入數(shù)塊據(jù)的起始地址size是每個數(shù)據(jù)塊的大小(待讀入的每個數(shù)據(jù)塊的字節(jié)數(shù))count是最多允許讀取的數(shù)據(jù)塊個數(shù)(每個數(shù)據(jù)塊size個字節(jié))返回實際讀到的數(shù)據(jù)塊個數(shù)將buffer指向的內(nèi)存中的數(shù)據(jù)塊寫入fp所指的文件第33頁/共40頁
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度膩子產(chǎn)品銷售與售后服務(wù)合同2篇
- 二零二五年度環(huán)保技術(shù)開發(fā)合伙投資合同
- 2024版學(xué)校污水處理設(shè)施清掏協(xié)議版B版
- 忻州師范學(xué)院《建筑工程評估基礎(chǔ)》2023-2024學(xué)年第一學(xué)期期末試卷
- 二零二五年水利工程勞務(wù)派遣與設(shè)備租賃合同3篇
- 西安工商學(xué)院《圖像處理》2023-2024學(xué)年第一學(xué)期期末試卷
- 武漢警官職業(yè)學(xué)院《低頻模擬電路》2023-2024學(xué)年第一學(xué)期期末試卷
- 文山學(xué)院《房屋建筑學(xué)課程設(shè)討》2023-2024學(xué)年第一學(xué)期期末試卷
- 二零二五年生物制藥技術(shù)轉(zhuǎn)讓及合作開發(fā)協(xié)議2篇
- 二零二五年度廠長任期企業(yè)戰(zhàn)略規(guī)劃與執(zhí)行合同2篇
- 2024年滄州經(jīng)濟開發(fā)區(qū)招聘社區(qū)工作者筆試真題
- 中外美術(shù)史試題及答案
- 2025年安徽省銅陵市公安局交警支隊招聘交通輔警14人歷年高頻重點提升(共500題)附帶答案詳解
- 公共政策分析 課件 第8章政策評估;第9章政策監(jiān)控
- 人教版八年級上學(xué)期物理期末復(fù)習(xí)(壓軸60題40大考點)
- 企業(yè)環(huán)保知識培訓(xùn)課件
- 2024年度管理評審報告
- 暨南大學(xué)《微觀經(jīng)濟學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 醫(yī)藥銷售合規(guī)培訓(xùn)
- DB51-T 5038-2018 四川省地面工程施工工藝標準
- 三年級數(shù)學(xué)(上)計算題專項練習(xí)附答案
評論
0/150
提交評論