廈門理工第10章對文件的輸入輸出_第1頁
廈門理工第10章對文件的輸入輸出_第2頁
廈門理工第10章對文件的輸入輸出_第3頁
廈門理工第10章對文件的輸入輸出_第4頁
廈門理工第10章對文件的輸入輸出_第5頁
已閱讀5頁,還剩37頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第10章對文件的輸入輸出10.1C文件的有關(guān)基本知識10.2打開與關(guān)閉文件10.3順序讀寫數(shù)據(jù)文件10.4隨機讀寫數(shù)據(jù)文件10.5文件讀寫的出錯檢測10.1C文件的有關(guān)基本知識10.1.1什么是文件10.1.2文件名10.1.3文件的分類10.1.4文件緩沖區(qū)10.1.5文件類型指針10.1.1什么是文件文件有不同的類型,在程序設(shè)計中,主要用到兩種文件:(1)程序文件。包括源程序文件(后綴為.c)、目標(biāo)文件(后綴為.obj)、可執(zhí)行文件(后綴為.exe)等。這種文件的內(nèi)容是程序代碼。10.1.1什么是文件文件有不同的類型,在程序設(shè)計中,主要用到兩種文件:(2)數(shù)據(jù)文件。文件的內(nèi)容不是程序,而是供程序運行時讀寫的數(shù)據(jù),如在程序運行過程中輸出到磁盤(或其他外部設(shè)備)的數(shù)據(jù),或在程序運行過程中供讀入的數(shù)據(jù)。如一批學(xué)生的成績數(shù)據(jù),或貨物交易的數(shù)據(jù)等。本章主要討論的是數(shù)據(jù)文件10.1.1什么是文件在以前各章中所處理的數(shù)據(jù)的輸入和輸出,從終端的鍵盤輸入數(shù)據(jù),運行結(jié)果輸出到終端顯示器上常常需要將一些數(shù)據(jù)輸出到磁盤上保存起來,以后使用這就要用到磁盤文件10.1.1什么是文件操作系統(tǒng)把各種設(shè)備都統(tǒng)一作為文件處理從操作系統(tǒng)的角度看,每一個與主機相聯(lián)的輸入輸出設(shè)備都看作是文件。例如,終端鍵盤是輸入文件顯示屏和打印機是輸出文件10.1.1什么是文件“文件”指存儲在外部介質(zhì)上數(shù)據(jù)的集合一批數(shù)據(jù)是以文件的形式存放在外部介質(zhì)上的操作系統(tǒng)是以文件為單位對數(shù)據(jù)進行管理想找存放在外部介質(zhì)上的數(shù)據(jù),先按文件名找到所指定的文件,然后再從該文件讀數(shù)據(jù)要向外部介質(zhì)上存儲數(shù)據(jù)也必須先建立一個文件(以文件名作為標(biāo)志),才能向它輸出數(shù)據(jù)10.1.1什么是文件輸入輸出是數(shù)據(jù)傳送的過程,數(shù)據(jù)如流水一樣從一處流向另一處,因此常將輸入輸出形象地稱為流(stream),即數(shù)據(jù)流。流表示了信息從源到目的端的流動。10.1.1什么是文件輸入操作時,數(shù)據(jù)從文件流向計算機內(nèi)存輸出操作時,數(shù)據(jù)從計算機流向文件無論是用Word打開或保存文件,還是C程序中的輸入輸出都是通過操作系統(tǒng)進行的“流”是一個傳輸通道,數(shù)據(jù)可以從運行環(huán)境流入程序中,或從程序流至運行環(huán)境10.1.1什么是文件從C程序的觀點來看,無論程序一次讀寫一個字符,或一行文字,或一個指定的數(shù)據(jù)區(qū),作為輸入輸出的各種文件或設(shè)備都是統(tǒng)一以邏輯數(shù)據(jù)流的方式出現(xiàn)的。C語言把文件看作是一個字符(或字節(jié))的序列。一個輸入輸出流就是一個字符流或字節(jié)(內(nèi)容為二進制數(shù)據(jù))流。10.1.1什么是文件C的數(shù)據(jù)文件由一連串的字符(或字節(jié))組成,而不考慮行的界限,兩行數(shù)據(jù)間不會自動加分隔符,對文件的存取是以字符(字節(jié))為單位的。輸入輸出數(shù)據(jù)流的開始和結(jié)束僅受程序控制而不受物理符號(如回車換行符)控制,這就增加了處理的靈活性。這種文件稱為流式文件。10.1.2文件名文件要有一個唯一的文件標(biāo)識,以便用戶識別和引用。文件標(biāo)識包括三部分:(1)文件路徑(2)文件名主干(3)文件后綴10.1.2文件名文件路徑表示文件在外部存儲設(shè)備中的位置。如:D:\CC\temp\file1.dat表示file1.dat文件存放在D盤中的CC目錄下的temp子目錄下面文件路徑文件名主干文件后綴10.1.2文件名文件路徑表示文件在外部存儲設(shè)備中的位置。如:D:\CC\temp\file1.dat表示file1.dat文件存放在D盤中的CC目錄下的temp子目錄下面文件名10.1.2文件名文件路徑表示文件在外部存儲設(shè)備中的位置。如:D:\CC\temp\file1.dat表示file1.dat文件存放在D盤中的CC目錄下的temp子目錄下面命名規(guī)則遵循標(biāo)識符的命名規(guī)則10.1.2文件名文件路徑表示文件在外部存儲設(shè)備中的位置。如:D:\CC\temp\file1.dat表示file1.dat文件存放在D盤中的CC目錄下的temp子目錄下面一般不超過3個字母(doc、txt、dat、c、cpp、obj、exe、ppt、bmp等)10.1.3文件的分類根據(jù)數(shù)據(jù)的組織形式,數(shù)據(jù)文件可分為ASCII文件和二進制文件。數(shù)據(jù)在內(nèi)存中是以二進制形式存儲的,如果不加轉(zhuǎn)換地輸出到外存,就是二進制文件如果要求在外存上以ASCII代碼形式存儲,則需要在存儲前進行轉(zhuǎn)換ASCII文件又稱文本文件,每一個字節(jié)放一個字符的ASCII代碼10.1.3文件的分類字符一律以ASCII形式存儲數(shù)值型數(shù)據(jù)既可以用ASCII形式存儲,也可以用二進制形式存儲如有整數(shù)10000,如果用ASCII碼形式輸出到磁盤,則在磁盤中占5個字節(jié)(每一個字符占一個字節(jié)),而用二進制形式輸出,則在磁盤上只占4個字節(jié)(用VC++C時)10.1.3文件的分類0011000100110000001100000011000000110000(1)(0)(0)(0)(0)ASCII形式00000000000000000010011100010000二進制形式(10000)10.1.4文件緩沖區(qū)ANSIC標(biāo)準(zhǔn)采用“緩沖文件系統(tǒng)”處理數(shù)據(jù)文件所謂緩沖文件系統(tǒng)是指系統(tǒng)自動地在內(nèi)存區(qū)為程序中每一個正在使用的文件開辟一個文件緩沖區(qū)10.1.4文件緩沖區(qū)從內(nèi)存向磁盤輸出數(shù)據(jù)必須先送到內(nèi)存中的緩沖區(qū),裝滿緩沖區(qū)后才一起送到磁盤去如果從磁盤向計算機讀入數(shù)據(jù),則一次從磁盤文件將一批數(shù)據(jù)輸入到內(nèi)存緩沖區(qū)(充滿緩沖區(qū)),然后再從緩沖區(qū)逐個地將數(shù)據(jù)送到程序數(shù)據(jù)區(qū)(給程序變量)10.1.4文件緩沖區(qū)程序數(shù)據(jù)區(qū)輸出文件緩沖區(qū)輸入文件緩沖區(qū)磁盤從內(nèi)存向磁盤輸出數(shù)據(jù)裝滿緩沖區(qū)10.1.4文件緩沖區(qū)程序數(shù)據(jù)區(qū)輸出文件緩沖區(qū)輸入文件緩沖區(qū)磁盤從磁盤向計算機讀入數(shù)據(jù)充滿緩沖區(qū)10.1.5文件類型指針緩沖文件系統(tǒng)中,關(guān)鍵的概念是“文件類型指針”,簡稱“文件指針”每個被使用的文件都在內(nèi)存中開辟一個相應(yīng)的文件信息區(qū),用來存放文件的有關(guān)信息(如文件的名字、文件狀態(tài)及文件當(dāng)前位置等)這些信息是保存在一個結(jié)構(gòu)體變量中的。該結(jié)構(gòu)體類型是由系統(tǒng)聲明的,取名為FILE10.1.5文件類型指針聲明FILE結(jié)構(gòu)體類型的信息包含在頭文件“stdio.h”中一般設(shè)置一個指向FILE類型變量的指針變量,然后通過它來引用這些FILE類型變量10.1.5文件類型指針FILE

*fp1,*fp2,*fp3;文件f1的文件信息區(qū)fp1文件f2的文件信息區(qū)fp2文件f3的文件信息區(qū)fp310.2打開與關(guān)閉文件10.2.1用fopen函數(shù)打開數(shù)據(jù)文件10.2.2用fclose函數(shù)關(guān)閉數(shù)據(jù)文件10.2.1用fopen函數(shù)打開數(shù)據(jù)文件對文件讀寫之前應(yīng)該“打開”該文件,在使用結(jié)束之后應(yīng)“關(guān)閉”該文件。所謂“打開”是指為文件建立相應(yīng)的信息區(qū)(用來存放有關(guān)文件的信息)和文件緩沖區(qū)(用來暫時存放輸入輸出的數(shù)據(jù))。10.2.1用fopen函數(shù)打開數(shù)據(jù)文件在編寫程序時,在打開文件的同時,一般都指定一個指針變量指向該文件,也就是建立起指針變量與文件之間的聯(lián)系,這樣就可以通過該指針變量對文件進行讀寫所謂“關(guān)閉”是指撤銷文件信息區(qū)和文件緩沖區(qū)10.2.1用fopen函數(shù)打開數(shù)據(jù)文件fopen函數(shù)的調(diào)用方式為:fopen(文件名,使用文件方式);例如:

fopen(“a1”,”r”);表示要打開名為“a1”的文件,使用文件方式為“讀入”fopen函數(shù)的返回值是指向a1文件的指針10.2.1用fopen函數(shù)打開數(shù)據(jù)文件通常將fopen函數(shù)的返回值賦給一個指向文件的指針變量。如:FILE*fp;fp=fopen(“a1”,”r”);fp和文件a1相聯(lián)系,fp指向了a1文件10.2.1用fopen函數(shù)打開數(shù)據(jù)文件在打開一個文件時,通知編譯系統(tǒng)以下3個信息:①需要訪問的文件的名字②使用文件的方式(“讀”還是“寫”等)③讓哪一個指針變量指向被打開的文件使用文件方式參見教材表10.1。說明:(1)用“r”方式打開的文件只能用于向計算機輸入而不能用作向該文件輸出數(shù)據(jù),而且該文件應(yīng)該已經(jīng)存在,并存有數(shù)據(jù),這樣程序才能從文件中讀數(shù)據(jù)。不能用“r”方式打開一個并不存在的文件,否則出錯。說明:(2)用“w”方式打開的文件只能用于向該文件寫數(shù)據(jù)(即輸出文件),而不能用來向計算機輸入。如果原來不存在該文件,則在打開文件前新建立一個以指定的名字命名的文件。如果原來已存在一個以該文件名命名的文件,則在打開文件前先將該文件刪去,然后重新建立一個新文件。說明:(3)如果希望向文件末尾添加新的數(shù)據(jù)(不希望刪除原有數(shù)據(jù)),則應(yīng)該用“a”方式打開但此時應(yīng)保證該文件已存在;否則將得到出錯信息。打開文件時,文件讀寫標(biāo)記移到文件末尾說明:(4)用r+、w+、a+方式打開的文件既可以用來輸入數(shù)據(jù),也可以用來輸出數(shù)據(jù)。用r+方式時該文件應(yīng)該已經(jīng)存在。用w+方式則新建立一個文件,先向此文件寫數(shù)據(jù),然后可以讀此文件中的數(shù)據(jù)。用a+方式打開的文件,原來的文件不被刪去,文件讀寫位置標(biāo)記移到文件末尾,可以添加,也可以讀。說明:(5)如果打開失敗,fopen函數(shù)將會帶回一個出錯信息。fopen函數(shù)將帶回一個空指針值NULL常用下面的方法打開一個文件:if((fp=fopen(“file1”,’r″))==NULL)

{printf(“cannotopenthisfile\n”);exit(0);

}終止正在執(zhí)行的程序說明:(6)C標(biāo)準(zhǔn)建議用表10.1列出的文件使用方式打開文本文件或二進制文件,但目前使用的有些C編譯系統(tǒng)可能不完全提供所有這些功能說明:(7)計算機輸從ASCII文件讀入字符時,遇到回車換行符,系統(tǒng)把它轉(zhuǎn)換為一個換行符,在輸出時把換行符轉(zhuǎn)換成為回車和換行兩個字符。在用二進制文件時,不進行這種轉(zhuǎn)換,在內(nèi)存中的數(shù)據(jù)形式與輸出到外部文件中的數(shù)據(jù)形式完全一致,一一對應(yīng)。說明:(8)程序中可以使用3個標(biāo)準(zhǔn)的流文件:標(biāo)準(zhǔn)輸入流、標(biāo)準(zhǔn)輸出流、標(biāo)準(zhǔn)出錯輸出流。系統(tǒng)已對這3個文件指定了與終端的對應(yīng)關(guān)系標(biāo)準(zhǔn)輸入流是

溫馨提示

  • 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)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論