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

下載本文檔

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

文檔簡介

1、10.1 文件的有關(guān)基本知識文件的有關(guān)基本知識10.2 打開與關(guān)閉文件打開與關(guān)閉文件10.3 順序讀寫數(shù)據(jù)文件順序讀寫數(shù)據(jù)文件10.4 隨機讀寫數(shù)據(jù)文件隨機讀寫數(shù)據(jù)文件10.5 文件讀寫的出錯檢測文件讀寫的出錯檢測10.1.1 什么是文件什么是文件10.1.2 文件名文件名10.1.3 文件的分類文件的分類10.1.4 文件緩沖區(qū)文件緩沖區(qū)10.1.5 文件類型指針文件類型指針文件有不同的類型,在程序設(shè)計中,主要文件有不同的類型,在程序設(shè)計中,主要用到兩種文件:用到兩種文件:(1) 程序文件程序文件。包括。包括源程序文件源程序文件(后綴為后綴為.c)、目標(biāo)文件目標(biāo)文件(后綴為后綴為.obj)、

2、可執(zhí)行文件可執(zhí)行文件(后綴為后綴為.exe)等。這種文件的內(nèi)容是程序代碼。等。這種文件的內(nèi)容是程序代碼。文件有不同的類型,在程序設(shè)計中,主要文件有不同的類型,在程序設(shè)計中,主要用到兩種文件:用到兩種文件:(2) 數(shù)據(jù)文件數(shù)據(jù)文件。文件的內(nèi)容不是程序,而是供。文件的內(nèi)容不是程序,而是供程序運行時讀寫的數(shù)據(jù),如在程序運行過程中程序運行時讀寫的數(shù)據(jù),如在程序運行過程中輸出到磁盤輸出到磁盤(或其他外部設(shè)備或其他外部設(shè)備)的數(shù)據(jù),或在程的數(shù)據(jù),或在程序運行過程中供讀入的數(shù)據(jù)。如一批學(xué)生的成序運行過程中供讀入的數(shù)據(jù)。如一批學(xué)生的成績數(shù)據(jù),或貨物交易的數(shù)據(jù)等??償?shù)據(jù),或貨物交易的數(shù)據(jù)等。本章主要討論的是本章

3、主要討論的是數(shù)據(jù)文件數(shù)據(jù)文件在以前各章中所處理的數(shù)據(jù)的輸入和輸出在以前各章中所處理的數(shù)據(jù)的輸入和輸出,從終端的鍵盤輸入數(shù)據(jù),運行結(jié)果輸出從終端的鍵盤輸入數(shù)據(jù),運行結(jié)果輸出到終端顯示器上到終端顯示器上常常需要將一些數(shù)據(jù)輸出到磁盤上保存起常常需要將一些數(shù)據(jù)輸出到磁盤上保存起來,以后來,以后使用使用這就要用到這就要用到磁盤文件磁盤文件操作系統(tǒng)把操作系統(tǒng)把各種設(shè)備都統(tǒng)一作為文件處理各種設(shè)備都統(tǒng)一作為文件處理從操作系統(tǒng)的角度看,每一個與主機相聯(lián)從操作系統(tǒng)的角度看,每一個與主機相聯(lián)的輸入輸出設(shè)備都看作是文件。例如,的輸入輸出設(shè)備都看作是文件。例如,u終端鍵盤是輸入文件終端鍵盤是輸入文件u顯示屏和打印機是輸

4、出文件顯示屏和打印機是輸出文件“文件文件”指存儲在外部介質(zhì)上數(shù)據(jù)的集合指存儲在外部介質(zhì)上數(shù)據(jù)的集合從從C程序的觀點來看,作為輸入輸出的各種文件程序的觀點來看,作為輸入輸出的各種文件或設(shè)備都是統(tǒng)一以或設(shè)備都是統(tǒng)一以邏輯數(shù)據(jù)流邏輯數(shù)據(jù)流的方式出現(xiàn)的。的方式出現(xiàn)的。的數(shù)據(jù)文件由一連串的的數(shù)據(jù)文件由一連串的字符(或字節(jié))字符(或字節(jié))組成,組成,而不考慮行的界限,兩行數(shù)據(jù)間不會自動加分隔而不考慮行的界限,兩行數(shù)據(jù)間不會自動加分隔符,對文件的存取是以字符(字節(jié))為單位的。符,對文件的存取是以字符(字節(jié))為單位的。輸入輸出數(shù)據(jù)流的開始和結(jié)束僅受程序控制而不輸入輸出數(shù)據(jù)流的開始和結(jié)束僅受程序控制而不受物理符

5、號(如回車換行符)控制,這就增加了受物理符號(如回車換行符)控制,這就增加了處理的靈活性。這種文件稱為處理的靈活性。這種文件稱為流式文件流式文件。文件要有一個唯一的文件標(biāo)識,以便用戶文件要有一個唯一的文件標(biāo)識,以便用戶識別和引用。識別和引用。文件標(biāo)識包括三部分:文件標(biāo)識包括三部分:(1)文件路徑文件路徑(2)文件名主干文件名主干(3)文件后綴文件后綴文件路徑表示文件在外部存儲設(shè)備中的位文件路徑表示文件在外部存儲設(shè)備中的位置。如:置。如: D: CCtempfile1.datu表示表示file1.dat文件存放在文件存放在D盤中的盤中的CC目錄下目錄下的的temp子目錄下面子目錄下面文件路徑文件

6、路徑文件名主干文件名主干文件后綴文件后綴文件路徑表示文件在外部存儲設(shè)備中的位文件路徑表示文件在外部存儲設(shè)備中的位置。如:置。如: D: CCtempfile1.datu表示表示file1.dat文件存放在文件存放在D盤中的盤中的CC目錄下目錄下的的temp子目錄下面子目錄下面文件名文件名文件路徑表示文件在外部存儲設(shè)備中的位文件路徑表示文件在外部存儲設(shè)備中的位置。如:置。如: D: CCtempfile1.datu表示表示file1.dat文件存放在文件存放在D盤中的盤中的CC目錄下目錄下的的temp子目錄下面子目錄下面命名規(guī)則遵循標(biāo)命名規(guī)則遵循標(biāo)識符的命名規(guī)則識符的命名規(guī)則文件路徑表示文件在外

7、部存儲設(shè)備中的位文件路徑表示文件在外部存儲設(shè)備中的位置。如:置。如: D: CCtempfile1.datu表示表示file1.dat文件存放在文件存放在D盤中的盤中的CC目錄下目錄下的的temp子目錄下面子目錄下面一般不超過一般不超過3個字母個字母(doc、txt、dat、c、cpp、obj、exe、ppt、bmp等)等)根據(jù)數(shù)據(jù)的組織形式,數(shù)據(jù)文件可分為根據(jù)數(shù)據(jù)的組織形式,數(shù)據(jù)文件可分為ASCII文件文件和和二進(jìn)制文件二進(jìn)制文件。u數(shù)據(jù)在內(nèi)存中是以二進(jìn)制形式存儲的,如果不數(shù)據(jù)在內(nèi)存中是以二進(jìn)制形式存儲的,如果不加轉(zhuǎn)換地輸出到外存,就是二進(jìn)制文件加轉(zhuǎn)換地輸出到外存,就是二進(jìn)制文件u如果要求在

8、外存上以如果要求在外存上以ASCII代碼形式存儲,代碼形式存儲,則需要在存儲前進(jìn)行轉(zhuǎn)換則需要在存儲前進(jìn)行轉(zhuǎn)換uASCII文件又稱文本文件,每一個字節(jié)放一文件又稱文本文件,每一個字節(jié)放一個字符的個字符的ASCII代碼代碼字符一律以字符一律以ASCII形式存儲形式存儲數(shù)值型數(shù)據(jù)既可以用數(shù)值型數(shù)據(jù)既可以用ASCII形式存儲,也形式存儲,也可以用二進(jìn)制形式存儲可以用二進(jìn)制形式存儲u如有整數(shù)如有整數(shù)10000,如果用,如果用ASCII碼形式輸出碼形式輸出到磁盤,則在磁盤中占個字節(jié)到磁盤,則在磁盤中占個字節(jié)(每一個字符每一個字符占一個字節(jié)占一個字節(jié)),而用二進(jìn)制形式輸出,則在磁,而用二進(jìn)制形式輸出,則在磁

9、盤上只占盤上只占4個字節(jié)個字節(jié)(用用VC+ C時時)0011000100110000001100000011000000110000(1)(0)(0)(0)(0)ASCII形式形式00000000000000000010011100010000二進(jìn)制形式二進(jìn)制形式(10000)ANSI C標(biāo)準(zhǔn)采用標(biāo)準(zhǔn)采用“緩沖文件系統(tǒng)緩沖文件系統(tǒng)”處理處理數(shù)據(jù)文件數(shù)據(jù)文件所謂所謂緩沖文件系統(tǒng)緩沖文件系統(tǒng)是指系統(tǒng)自動地在內(nèi)存是指系統(tǒng)自動地在內(nèi)存區(qū)為程序中每一個正在使用的文件開辟一區(qū)為程序中每一個正在使用的文件開辟一個文件緩沖區(qū)個文件緩沖區(qū)從內(nèi)存向磁盤從內(nèi)存向磁盤輸出數(shù)據(jù)輸出數(shù)據(jù)必須先送到內(nèi)存中必須先送到內(nèi)存中的

10、緩沖區(qū),裝滿緩沖區(qū)后才一起送到磁盤的緩沖區(qū),裝滿緩沖區(qū)后才一起送到磁盤去去如果從磁盤向計算機如果從磁盤向計算機讀入數(shù)據(jù)讀入數(shù)據(jù),則一次從,則一次從磁盤文件將一批數(shù)據(jù)輸入到內(nèi)存緩沖區(qū)(磁盤文件將一批數(shù)據(jù)輸入到內(nèi)存緩沖區(qū)(充滿緩沖區(qū)),然后再從緩沖區(qū)逐個地將充滿緩沖區(qū)),然后再從緩沖區(qū)逐個地將數(shù)據(jù)送到程序數(shù)據(jù)區(qū)(給程序變量)數(shù)據(jù)送到程序數(shù)據(jù)區(qū)(給程序變量)緩沖文件系統(tǒng)中,關(guān)鍵的概念是緩沖文件系統(tǒng)中,關(guān)鍵的概念是“文件類文件類型指針型指針”,簡稱,簡稱“文件指針文件指針”u每個被使用的文件都在內(nèi)存中開辟一個相應(yīng)的每個被使用的文件都在內(nèi)存中開辟一個相應(yīng)的文件信息區(qū)文件信息區(qū),用來存放文件的有關(guān)信息(如

11、文,用來存放文件的有關(guān)信息(如文件的名字、文件狀態(tài)及文件當(dāng)前位置等)件的名字、文件狀態(tài)及文件當(dāng)前位置等)u這些信息是保存在一個結(jié)構(gòu)體變量中的。該這些信息是保存在一個結(jié)構(gòu)體變量中的。該結(jié)結(jié)構(gòu)體類型構(gòu)體類型是由系統(tǒng)聲明的,取名為是由系統(tǒng)聲明的,取名為FILE聲明聲明FILE結(jié)構(gòu)體類型的信息包含在頭文件結(jié)構(gòu)體類型的信息包含在頭文件“stdio.h”中中一般一般設(shè)置一個指向設(shè)置一個指向FILE類型變量的指針變類型變量的指針變量,然后通過它來引用這些量,然后通過它來引用這些FILE類型變量類型變量uFILE *fp;10.2.1 用用fopen函數(shù)打開數(shù)據(jù)文件函數(shù)打開數(shù)據(jù)文件10.2.2 用用fclos

12、e函數(shù)關(guān)閉數(shù)據(jù)文件函數(shù)關(guān)閉數(shù)據(jù)文件對文件讀寫之前應(yīng)該對文件讀寫之前應(yīng)該“打開打開”該文件,在該文件,在使用結(jié)束之后應(yīng)使用結(jié)束之后應(yīng)“關(guān)閉關(guān)閉”該文件。該文件。所謂所謂“打開打開”是指為文件建立相應(yīng)的信息是指為文件建立相應(yīng)的信息區(qū)區(qū)(用來存放有關(guān)文件的信息用來存放有關(guān)文件的信息)和文件緩沖和文件緩沖區(qū)區(qū)(用來暫時存放輸入輸出的數(shù)據(jù)用來暫時存放輸入輸出的數(shù)據(jù))。所謂所謂“關(guān)閉關(guān)閉”是指撤銷文件信息區(qū)和文件是指撤銷文件信息區(qū)和文件緩沖區(qū)緩沖區(qū)fopen函數(shù)的調(diào)用方式為:函數(shù)的調(diào)用方式為:fopen(文件名文件名,使用文件方式使用文件方式);例如:例如: fopen(“a1”,”r”); u表示要打開

13、名為表示要打開名為“a1”的文件,使用文件方的文件,使用文件方式為式為“讀入讀入”ufopen函數(shù)的返回值是指向函數(shù)的返回值是指向a1文件的指針文件的指針通常將通常將fopen函數(shù)的返回值賦給一個指向函數(shù)的返回值賦給一個指向文件的指針變量。如:文件的指針變量。如:FILE *fp; fp=fopen(“a1”,”r”);ufp和文件和文件a1相聯(lián)系,相聯(lián)系,fp指向了指向了a1文件文件在打開一個文件時,通知編譯系統(tǒng)以下在打開一個文件時,通知編譯系統(tǒng)以下3個信息:個信息:需要訪問的文件的名字需要訪問的文件的名字使用文件的方式(使用文件的方式(“讀讀”還是還是“寫寫”等)等)讓哪一個指針變量指向被

14、打開的文件讓哪一個指針變量指向被打開的文件使用文件方式使用文件方式參參見見教材教材表表10.1。說明:說明:(1) 用用“r”方式打開的文件只能用于方式打開的文件只能用于向計算向計算機輸入機輸入而不能用作向該文件輸出數(shù)據(jù),而且而不能用作向該文件輸出數(shù)據(jù),而且該文件應(yīng)該已經(jīng)存在該文件應(yīng)該已經(jīng)存在,并存有數(shù)據(jù),這樣程,并存有數(shù)據(jù),這樣程序才能從文件中讀數(shù)據(jù)。序才能從文件中讀數(shù)據(jù)。u不能用不能用“r”方式打開一個并不存在的文件,方式打開一個并不存在的文件,否則出錯。否則出錯。說明:說明:(2) 用用“w”方式打開的文件只能用于方式打開的文件只能用于向該文向該文件寫數(shù)據(jù)件寫數(shù)據(jù)(即輸出文件),而不能用

15、來向計(即輸出文件),而不能用來向計算機輸入。算機輸入。u如果原來不存在如果原來不存在該文件,則在打開文件前新該文件,則在打開文件前新建立一個以指定的名字命名的文件。建立一個以指定的名字命名的文件。u如果原來已存在如果原來已存在一個以該文件名命名的文件一個以該文件名命名的文件,則在打開文件前先將該文件刪去,然后重,則在打開文件前先將該文件刪去,然后重新建立一個新文件。新建立一個新文件。說明:說明:(3) 如果希望如果希望向文件末尾添加新的數(shù)據(jù)向文件末尾添加新的數(shù)據(jù)(不希(不希望刪除原有數(shù)據(jù)),則應(yīng)該用望刪除原有數(shù)據(jù)),則應(yīng)該用“a”方式打開方式打開u但此時但此時應(yīng)保證該文件已存在應(yīng)保證該文件已

16、存在;否則將得到出;否則將得到出錯信息。錯信息。u打開文件時,文件讀寫標(biāo)記移到文件末尾打開文件時,文件讀寫標(biāo)記移到文件末尾說明:說明:(4) 用用r+、w+、a+方式打開的文件既可以方式打開的文件既可以用來輸入數(shù)據(jù),也可以用來輸出數(shù)據(jù)。用來輸入數(shù)據(jù),也可以用來輸出數(shù)據(jù)。u用用r+方式時該文件應(yīng)該已經(jīng)存在。方式時該文件應(yīng)該已經(jīng)存在。u用用w+方式則新建立一個文件,先向此文件方式則新建立一個文件,先向此文件寫數(shù)據(jù),然后可以讀此文件中的數(shù)據(jù)。寫數(shù)據(jù),然后可以讀此文件中的數(shù)據(jù)。u用用a+方式打開的文件,原來的文件不被刪去方式打開的文件,原來的文件不被刪去,文件讀寫位置標(biāo)記移到文件末尾,可以添,文件讀寫

17、位置標(biāo)記移到文件末尾,可以添加,也可以讀。加,也可以讀。說明:說明:(5) 如果打開如果打開失敗失敗,fopen函數(shù)將會帶回一個函數(shù)將會帶回一個出錯信息。出錯信息。fopen函數(shù)將帶回一個空指針值函數(shù)將帶回一個空指針值NULL常用下面的方法打開一個文件:常用下面的方法打開一個文件: if (fp=fopen(“file1”,r)=NULL)printf(“cannot open this filen”); exit(0);終止正在執(zhí)行的程序終止正在執(zhí)行的程序說明:說明:(6) C標(biāo)準(zhǔn)建議用標(biāo)準(zhǔn)建議用表表10.1列出的文件使用方式列出的文件使用方式打開文本文件或二進(jìn)制文件,但目前使用的打開文本文

18、件或二進(jìn)制文件,但目前使用的有些有些C編譯系統(tǒng)可能不完全提供所有這些功能編譯系統(tǒng)可能不完全提供所有這些功能說明:說明:(7) 計算機輸從計算機輸從ASCII文件文件讀入讀入字符時,遇到字符時,遇到回車換行符,系統(tǒng)把它轉(zhuǎn)換為一個換行符,回車換行符,系統(tǒng)把它轉(zhuǎn)換為一個換行符,在在輸出輸出時把換行符轉(zhuǎn)換成為回車和換行兩個時把換行符轉(zhuǎn)換成為回車和換行兩個字符。在用二進(jìn)制文件時,不進(jìn)行這種轉(zhuǎn)換字符。在用二進(jìn)制文件時,不進(jìn)行這種轉(zhuǎn)換,在內(nèi)存中的數(shù)據(jù)形式與輸出到外部文件中,在內(nèi)存中的數(shù)據(jù)形式與輸出到外部文件中的數(shù)據(jù)形式完全一致,一一對應(yīng)。的數(shù)據(jù)形式完全一致,一一對應(yīng)。說明:說明:(8) 程序中可以使用程序中

19、可以使用3個標(biāo)準(zhǔn)的流文件個標(biāo)準(zhǔn)的流文件:標(biāo)準(zhǔn)輸標(biāo)準(zhǔn)輸入流、標(biāo)準(zhǔn)輸出流、標(biāo)準(zhǔn)出錯輸出流。入流、標(biāo)準(zhǔn)輸出流、標(biāo)準(zhǔn)出錯輸出流。u系統(tǒng)已對這系統(tǒng)已對這3個文件指定了與終端的對應(yīng)關(guān)系個文件指定了與終端的對應(yīng)關(guān)系u標(biāo)準(zhǔn)輸入流標(biāo)準(zhǔn)輸入流stdin是從終端的輸入是從終端的輸入u標(biāo)準(zhǔn)輸出流標(biāo)準(zhǔn)輸出流stdout是向終端的輸出是向終端的輸出u標(biāo)準(zhǔn)出錯輸出流標(biāo)準(zhǔn)出錯輸出流stderr是當(dāng)程序出錯時將出是當(dāng)程序出錯時將出錯信息發(fā)送到終端錯信息發(fā)送到終端程序開始運行時程序開始運行時系統(tǒng)自動打開這系統(tǒng)自動打開這3個標(biāo)準(zhǔn)個標(biāo)準(zhǔn)流文件流文件。因此,程序編寫者不需要在程。因此,程序編寫者不需要在程序中用序中用fopen函數(shù)打開

20、它們。所以以前函數(shù)打開它們。所以以前我們用到的從終端輸入或輸出到終端都我們用到的從終端輸入或輸出到終端都不需要打開終端文件。不需要打開終端文件。關(guān)閉文件用關(guān)閉文件用fclose函數(shù)。函數(shù)。fclose函數(shù)調(diào)函數(shù)調(diào)用的一般形式為用的一般形式為fclose(文件指針文件指針); 例如:例如: fclose (fp); 如果不關(guān)閉文件將會如果不關(guān)閉文件將會丟失丟失數(shù)據(jù)。數(shù)據(jù)。10.3.1 怎樣向文件讀寫字符怎樣向文件讀寫字符10.3.2 怎樣向文件讀寫一個字符串怎樣向文件讀寫一個字符串10.3.3 用格式化的方式讀寫文用格式化的方式讀寫文件件10.3.4 用二進(jìn)制方式向文件讀寫一組數(shù)據(jù)用二進(jìn)制方式向

21、文件讀寫一組數(shù)據(jù)函數(shù)名函數(shù)名調(diào)用形式調(diào)用形式功能功能返回值返回值fgetcfgetc(fp)從從fp指向的指向的文件讀入一文件讀入一個字符個字符讀成功,帶回所讀讀成功,帶回所讀的字符,失敗則返的字符,失敗則返回文件結(jié)束標(biāo)志回文件結(jié)束標(biāo)志(即即-1)fputcfputc(ch,fp)把字符把字符ch寫寫到文件指針到文件指針變量變量fp所指所指向的文件中向的文件中寫成功,返回值就寫成功,返回值就是輸出的字符;輸是輸出的字符;輸出失敗,則返回出失敗,則返回(即(即-1)讀寫一個字符的函數(shù)讀寫一個字符的函數(shù)讀寫一個字符串的函數(shù)讀寫一個字符串的函數(shù)函數(shù)名函數(shù)名調(diào)用形式調(diào)用形式功能功能返回值返回值fget

22、sfgets(str,n,fp)從從fp指向的文件讀指向的文件讀入長度為入長度為(n-1)的字的字符串,存放到字符符串,存放到字符數(shù)組數(shù)組str中中讀成功,返讀成功,返回地址回地址str,失敗則返回失敗則返回NULL)fputsfputs(str,fp)str所指向的字符串所指向的字符串寫到文件指針變量寫到文件指針變量fp所指向的文件中所指向的文件中寫成功,返寫成功,返回回 0 ; 否 則; 否 則返回非返回非0值值說明:說明:fgets函數(shù)的函數(shù)原型為:函數(shù)的函數(shù)原型為: char *fgets (char *str,int n,FILE *fp);u其作用是從文件讀入一個字符串其作用是從文

23、件讀入一個字符串u調(diào)用時可以寫成:調(diào)用時可以寫成: fgets(str,n,fp);說明:說明:ufgets(str,n,fp);中中n是要求得到的字符個數(shù)是要求得到的字符個數(shù),但實際上,但實際上只讀只讀n-1個字符個字符,然后在最后加一個,然后在最后加一個0字符,這樣得到的字符串共有字符,這樣得到的字符串共有n個字符,把個字符,把它們放到字符數(shù)組它們放到字符數(shù)組str中中u如果在讀完如果在讀完n-1個字符之前遇到換行符個字符之前遇到換行符“n”或文件結(jié)束符或文件結(jié)束符EOF,讀入即結(jié)束,但將所遇到,讀入即結(jié)束,但將所遇到的換行符的換行符“n”也作為一個字符讀入也作為一個字符讀入u執(zhí)行執(zhí)行fg

24、ets成功,返回成功,返回str數(shù)組首地址,如果一數(shù)組首地址,如果一開始就遇到文件尾或讀數(shù)據(jù)錯,返回開始就遇到文件尾或讀數(shù)據(jù)錯,返回NULL說明:說明:fputs函數(shù)的函數(shù)原型為:函數(shù)的函數(shù)原型為: int fputs (char *str, FILE *fp);ustr指向的字符串輸出到指向的字符串輸出到fp所指向的文件中所指向的文件中u調(diào)用時可以寫成:調(diào)用時可以寫成: fputs(”China”,fp);ufputs函數(shù)中第一個參數(shù)可以是字符串常量、函數(shù)中第一個參數(shù)可以是字符串常量、字符數(shù)組名或字符型指針字符數(shù)組名或字符型指針u字符串末尾的字符串末尾的0不輸出不輸出u輸出成功,函數(shù)值為;失

25、敗,函數(shù)值為輸出成功,函數(shù)值為;失敗,函數(shù)值為EOF一般調(diào)用方式為:一般調(diào)用方式為:fprintf(文件指針文件指針,格式字符串格式字符串,輸出表列輸出表列);fscanf (文件指針文件指針,格式字符串格式字符串,輸入表列輸入表列);如:如:fprintf (fp,”%d,%6.2f”,i,f);fscanf (fp,”%d,%f”,&i,&f);一般調(diào)用形式為一般調(diào)用形式為:fread(buffer,size,count,fp);fwrite(buffer,size,count,fp); buffer:是一個地址:是一個地址u對對fread來說,它是用來存放從文件讀入的來說

26、,它是用來存放從文件讀入的數(shù)據(jù)的存儲區(qū)的地址數(shù)據(jù)的存儲區(qū)的地址u對對fwrite來說,是要把此地址開始的存儲區(qū)來說,是要把此地址開始的存儲區(qū)中的數(shù)據(jù)向文件輸出中的數(shù)據(jù)向文件輸出size:要讀寫的字節(jié)數(shù):要讀寫的字節(jié)數(shù)count:要讀寫多少個數(shù)據(jù)項:要讀寫多少個數(shù)據(jù)項fp:FILE類型指針類型指針10.4.1 文件位置標(biāo)記及其定位文件位置標(biāo)記及其定位10.4.2 隨機讀寫隨機讀寫1.文件位置標(biāo)記文件位置標(biāo)記為了對讀寫進(jìn)行控制,系統(tǒng)為每個文為了對讀寫進(jìn)行控制,系統(tǒng)為每個文件設(shè)置了一個件設(shè)置了一個文件讀寫位置標(biāo)記文件讀寫位置標(biāo)記(簡簡稱文件標(biāo)記稱文件標(biāo)記),用來指示,用來指示“接下來要接下來要讀寫的

27、下一個字符的位置讀寫的下一個字符的位置”文件指針文件指針讀寫當(dāng)前位置讀寫當(dāng)前位置文件尾文件尾1.文件位置標(biāo)記文件位置標(biāo)記文件頭文件頭1.文件位置標(biāo)記文件位置標(biāo)記如果是如果是順序?qū)懳募樞驅(qū)懳募?,則每寫完一個數(shù)據(jù),則每寫完一個數(shù)據(jù)后,文件標(biāo)記順序向后移一個位置,然后,文件標(biāo)記順序向后移一個位置,然后在下一次執(zhí)行寫操作時把數(shù)據(jù)寫入指后在下一次執(zhí)行寫操作時把數(shù)據(jù)寫入指針?biāo)傅奈恢?。直到把全部?shù)據(jù)寫完,針?biāo)傅奈恢谩V钡桨讶繑?shù)據(jù)寫完,此時文件位置標(biāo)記在最后一個數(shù)據(jù)之后此時文件位置標(biāo)記在最后一個數(shù)據(jù)之后1.文件位置標(biāo)記文件位置標(biāo)記可以根據(jù)讀寫的需要,人為地移動了文可以根據(jù)讀寫的需要,人為地移動了文件標(biāo)

28、記的位置。文件標(biāo)記可以向前移、件標(biāo)記的位置。文件標(biāo)記可以向前移、向后移,移到文件頭或文件尾,然后對向后移,移到文件頭或文件尾,然后對該位置進(jìn)行讀寫該位置進(jìn)行讀寫隨機讀寫隨機讀寫隨機讀寫隨機讀寫可以在任何位置寫入數(shù)據(jù),在可以在任何位置寫入數(shù)據(jù),在任何位置讀取數(shù)據(jù)任何位置讀取數(shù)據(jù)2. 文件位置標(biāo)記的定位文件位置標(biāo)記的定位u可以強制使文件位置標(biāo)記指向指定的位置可以強制使文件位置標(biāo)記指向指定的位置u可以用以下函數(shù)實現(xiàn)可以用以下函數(shù)實現(xiàn):(1)用用rewind函數(shù)函數(shù)使文件標(biāo)記指向文件開頭使文件標(biāo)記指向文件開頭 rewind函數(shù)的作用是使文件標(biāo)記重新返回文函數(shù)的作用是使文件標(biāo)記重新返回文件的開頭,此函數(shù)

29、沒有返回值。件的開頭,此函數(shù)沒有返回值。2. 文件位置標(biāo)記的定位文件位置標(biāo)記的定位u可以強制使文件標(biāo)記指向指定的位置可以強制使文件標(biāo)記指向指定的位置u可以用以下函數(shù)實現(xiàn)可以用以下函數(shù)實現(xiàn):(2) 用用fseek函數(shù)函數(shù)改變文件標(biāo)記改變文件標(biāo)記fseek函數(shù)的調(diào)用形式為函數(shù)的調(diào)用形式為:fseek(文件類型指針文件類型指針,位移量位移量,起始點起始點) u起始點起始點0代表代表“文件開始位置文件開始位置”,1為為“當(dāng)前當(dāng)前位置位置”,2為為“文件末尾位置文件末尾位置”標(biāo)準(zhǔn)指定的名字標(biāo)準(zhǔn)指定的名字起始點起始點名名 字字用數(shù)字代表用數(shù)字代表文件開始位置文件開始位置SEEK_SET0文件當(dāng)前位置文件當(dāng)

30、前位置SEEK_CUR1文件末尾位置文件末尾位置SEEK_END2位移量指以起始點為基點,向前移動的字位移量指以起始點為基點,向前移動的字節(jié)數(shù)。節(jié)數(shù)。位移量應(yīng)是位移量應(yīng)是long型數(shù)據(jù)型數(shù)據(jù)(在數(shù)字的在數(shù)字的末尾加一個字母末尾加一個字母L)。fseek函數(shù)一般用于二進(jìn)制文件。下面是函數(shù)一般用于二進(jìn)制文件。下面是fseek函數(shù)調(diào)用的幾個例子:函數(shù)調(diào)用的幾個例子: ufseek (fp,100L,0); ufseek (fp,50L,1); ufseek (fp,-10L,2); 2. 文件位置標(biāo)記的定位文件位置標(biāo)記的定位u可以強制使文件位置標(biāo)記指向指定的位置可以強制使文件位置標(biāo)記指向指定的位置u

31、可以用以下函數(shù)實現(xiàn)可以用以下函數(shù)實現(xiàn):(3) 用用ftell函數(shù)函數(shù)測定文件位置標(biāo)記的當(dāng)前位置測定文件位置標(biāo)記的當(dāng)前位置ftell函數(shù)的作用是得到流式文件中文件位置標(biāo)函數(shù)的作用是得到流式文件中文件位置標(biāo)記的當(dāng)前位置。記的當(dāng)前位置。由于文件中的文件位置標(biāo)記經(jīng)常移動,人由于文件中的文件位置標(biāo)記經(jīng)常移動,人們往往不容易知道其當(dāng)前位置,所以常用們往往不容易知道其當(dāng)前位置,所以常用ftell函數(shù)得到當(dāng)前位置,用函數(shù)得到當(dāng)前位置,用相對于文件開相對于文件開頭的位移量來頭的位移量來表示。如果調(diào)用函數(shù)時出錯表示。如果調(diào)用函數(shù)時出錯(如不存在(如不存在fp指向的文件),指向的文件),ftell函數(shù)返函數(shù)返回值為回值為-1L。例如:。

溫馨提示

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

評論

0/150

提交評論