




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、整理ppt10.1 文件的有關基本知識文件的有關基本知識10.2 打開與關閉文件打開與關閉文件10.3 順序讀寫數據文件順序讀寫數據文件10.4 隨機讀寫數據文件隨機讀寫數據文件10.5 文件讀寫的出錯檢測文件讀寫的出錯檢測整理ppt10.1.1 什么是文件什么是文件10.1.2 文件名文件名10.1.3 文件的分類文件的分類10.1.4 文件緩沖區文件緩沖區10.1.5 文件類型指針文件類型指針整理ppt文件有不同的類型,在程序設計中,主要文件有不同的類型,在程序設計中,主要用到兩種文件:用到兩種文件:(1) 程序文件程序文件。包括。包括源程序文件源程序文件(后綴為后綴為.c)、目標文件目標
2、文件(后綴為后綴為.obj)、可執行文件可執行文件(后綴為后綴為.exe)等。這種文件的內容是程序代碼。等。這種文件的內容是程序代碼。整理ppt文件有不同的類型,在程序設計中,主要文件有不同的類型,在程序設計中,主要用到兩種文件:用到兩種文件:(2) 數據文件數據文件。文件的內容不是程序,而是供。文件的內容不是程序,而是供程序運行時讀寫的數據,如在程序運行過程中程序運行時讀寫的數據,如在程序運行過程中輸出到磁盤輸出到磁盤(或其他外部設備或其他外部設備)的數據,或在程的數據,或在程序運行過程中供讀入的數據。如一批學生的成序運行過程中供讀入的數據。如一批學生的成績數據,或貨物交易的數據等。績數據,
3、或貨物交易的數據等。本章主要討論的是本章主要討論的是數據文件數據文件整理ppt在以前各章中所處理的數據的輸入和輸出在以前各章中所處理的數據的輸入和輸出,從終端的鍵盤輸入數據,運行結果輸出從終端的鍵盤輸入數據,運行結果輸出到終端顯示器上到終端顯示器上常常需要將一些數據輸出到磁盤上保存起常常需要將一些數據輸出到磁盤上保存起來,以后來,以后使用使用這就要用到磁盤文件這就要用到磁盤文件整理ppt操作系統把各種設備都統一作為文件處理操作系統把各種設備都統一作為文件處理從操作系統的角度看,每一個與主機相聯從操作系統的角度看,每一個與主機相聯的輸入輸出設備都看作是文件。例如,的輸入輸出設備都看作是文件。例如
4、,u終端鍵盤是輸入文件終端鍵盤是輸入文件u顯示屏和打印機是輸出文件顯示屏和打印機是輸出文件整理ppt“文件文件”指存儲在外部介質上數據的集合指存儲在外部介質上數據的集合u一批數據是以文件的形式存放在外部介質上的一批數據是以文件的形式存放在外部介質上的u操作系統是以文件為單位對數據進行管理操作系統是以文件為單位對數據進行管理u想找存放在外部介質上的數據,先按文件名找想找存放在外部介質上的數據,先按文件名找到所指定的文件,然后再從該文件讀數據到所指定的文件,然后再從該文件讀數據u要向外部介質上存儲數據也必須先建立一個文要向外部介質上存儲數據也必須先建立一個文件(以文件名作為標志),才能向它輸出數據
5、件(以文件名作為標志),才能向它輸出數據整理ppt輸入輸出是數據傳送的過程,數據如流水輸入輸出是數據傳送的過程,數據如流水一樣從一處流向另一處,因此常將輸入輸一樣從一處流向另一處,因此常將輸入輸出形象地稱為流出形象地稱為流(stream),即數據流。,即數據流。流表示了信息從源到目的端的流動。流表示了信息從源到目的端的流動。整理ppt輸入操作時,數據從文件流向計算機內存輸入操作時,數據從文件流向計算機內存輸出操作時,數據從計算機流向文件輸出操作時,數據從計算機流向文件無論是用無論是用Word打開或保存文件,還是打開或保存文件,還是C程序中的輸入輸出都是通過操作系統進行程序中的輸入輸出都是通過操
6、作系統進行的的“流流”是一個傳輸通道,數據可以從運行是一個傳輸通道,數據可以從運行環境流入程序中,或從程序流至運行環境環境流入程序中,或從程序流至運行環境整理ppt從從C程序的觀點來看,無論程序一次讀寫程序的觀點來看,無論程序一次讀寫一個字符,或一行文字,或一個指定的數一個字符,或一行文字,或一個指定的數據區,作為輸入輸出的各種文件或設備都據區,作為輸入輸出的各種文件或設備都是統一以是統一以邏輯數據流邏輯數據流的方式出現的。語的方式出現的。語言把文件看作是一個字符言把文件看作是一個字符(或字節)(或字節)的序的序列。一個輸入輸出流就是一個字符流或字列。一個輸入輸出流就是一個字符流或字節節(內容
7、為二進制數據內容為二進制數據)流。流。整理ppt的數據文件由一連串的字符(或字節)的數據文件由一連串的字符(或字節)組成,而不考慮行的界限,兩行數據間不組成,而不考慮行的界限,兩行數據間不會自動加分隔符,對文件的存取是以字符會自動加分隔符,對文件的存取是以字符(字節)為單位的。輸入輸出數據流的開(字節)為單位的。輸入輸出數據流的開始和結束僅受程序控制而不受物理符號(始和結束僅受程序控制而不受物理符號(如回車換行符)控制,這就增加了處理的如回車換行符)控制,這就增加了處理的靈活性。這種文件稱為靈活性。這種文件稱為流式文件流式文件。整理ppt文件要有一個唯一的文件標識,以便用戶文件要有一個唯一的文
8、件標識,以便用戶識別和引用。識別和引用。文件標識包括三部分:文件標識包括三部分:(1)文件路徑文件路徑(2)文件名主干文件名主干(3)文件后綴文件后綴整理ppt文件路徑表示文件在外部存儲設備中的位文件路徑表示文件在外部存儲設備中的位置。如:置。如: D: CCtempu表示文件存放在表示文件存放在D盤中的盤中的CC目錄下的目錄下的temp子目錄下面子目錄下面文件路徑文件路徑文件名主干文件名主干文件后綴文件后綴整理ppt文件路徑表示文件在外部存儲設備中的位文件路徑表示文件在外部存儲設備中的位置。如:置。如: D: CCtempu表示文件存放在表示文件存放在D盤中的盤中的CC目錄下的目錄下的tem
9、p子目錄下面子目錄下面文件名文件名整理ppt文件路徑表示文件在外部存儲設備中的位文件路徑表示文件在外部存儲設備中的位置。如:置。如: D: CCtempu表示文件存放在表示文件存放在D盤中的盤中的CC目錄下的目錄下的temp子目錄下面子目錄下面命名規則遵循標命名規則遵循標識符的命名規則識符的命名規則整理ppt文件路徑表示文件在外部存儲設備中的位文件路徑表示文件在外部存儲設備中的位置。如:置。如: D: CCtempu表示文件存放在表示文件存放在D盤中的盤中的CC目錄下的目錄下的temp子目錄下面子目錄下面一般不超過一般不超過3個字母個字母(doc、txt、dat、c、cpp、obj、exe、p
10、pt、bmp等)等)整理ppt根據數據的組織形式,數據文件可分為根據數據的組織形式,數據文件可分為ASCII文件文件和和二進制文件二進制文件。u數據在內存中是以二進制形式存儲的,如果不數據在內存中是以二進制形式存儲的,如果不加轉換地輸出到外存,就是加轉換地輸出到外存,就是二進制文件二進制文件u如果要求在外存上以如果要求在外存上以ASCII代碼形式存儲,代碼形式存儲,則需要在存儲前進行轉換則需要在存儲前進行轉換uASCII文件又稱文本文件,每一個字節放一文件又稱文本文件,每一個字節放一個字符的個字符的ASCII代碼代碼整理ppt字符一律以字符一律以ASCII形式存儲形式存儲數值型數據既可以用數值
11、型數據既可以用ASCII形式存儲,也形式存儲,也可以用二進制形式存儲可以用二進制形式存儲u如有整數如有整數10000,如果用,如果用ASCII碼形式輸出碼形式輸出到磁盤,則在磁盤中占個字節到磁盤,則在磁盤中占個字節(每一個字符每一個字符占一個字節占一個字節),而用二進制形式輸出,則在磁,而用二進制形式輸出,則在磁盤上只占盤上只占4個字節個字節(用用VC+ C時時)整理ppt(1)(0)(0)(0)(0)ASCII形式形式二進制形式二進制形式(10000)整理pptANSI C標準采用標準采用“緩沖文件系統緩沖文件系統”處理處理數據文件數據文件所謂所謂緩沖文件系統緩沖文件系統是指系統自動地在內存
12、是指系統自動地在內存區為程序中每一個正在使用的文件開辟一區為程序中每一個正在使用的文件開辟一個文件緩沖區個文件緩沖區整理ppt從內存向磁盤輸出數據必須先送到內存中從內存向磁盤輸出數據必須先送到內存中的緩沖區,裝滿緩沖區后才一起送到磁盤的緩沖區,裝滿緩沖區后才一起送到磁盤去去如果從磁盤向計算機讀入數據,則一次從如果從磁盤向計算機讀入數據,則一次從磁盤文件將一批數據輸入到內存緩沖區(磁盤文件將一批數據輸入到內存緩沖區(充滿緩沖區),然后再從緩沖區逐個地將充滿緩沖區),然后再從緩沖區逐個地將數據送到程序數據區(給程序變量)數據送到程序數據區(給程序變量)整理ppt程序數據區程序數據區輸出文件緩沖區輸
13、出文件緩沖區輸入文件緩沖區輸入文件緩沖區磁盤磁盤從內存向磁盤輸出數據從內存向磁盤輸出數據裝滿緩沖區裝滿緩沖區整理ppt程序數據區程序數據區輸出文件緩沖區輸出文件緩沖區輸入文件緩沖區輸入文件緩沖區磁盤磁盤從磁盤向計算機讀入數據從磁盤向計算機讀入數據充滿緩沖區充滿緩沖區整理ppt緩沖文件系統中,關鍵的概念是緩沖文件系統中,關鍵的概念是“文件類文件類型指針型指針”,簡稱,簡稱“文件指針文件指針”u每個被使用的文件都在內存中開辟一個相應的每個被使用的文件都在內存中開辟一個相應的文件信息區,用來存放文件的有關信息(如文文件信息區,用來存放文件的有關信息(如文件的名字、文件狀態及文件當前位置等)件的名字、
14、文件狀態及文件當前位置等)u這些信息是保存在一個結構體變量中的。該結這些信息是保存在一個結構體變量中的。該結構體類型是由系統聲明的,取名為構體類型是由系統聲明的,取名為FILE整理ppt聲明聲明FILE結構體類型的信息包含在頭文件結構體類型的信息包含在頭文件“stdio.h”中中一般一般設置一個指向設置一個指向FILE類型變量的指針變類型變量的指針變量,然后通過它來引用這些量,然后通過它來引用這些FILE類型變量類型變量整理pptFILE*fp1,*fp2,*fp3;文件文件f1的的文件信息區文件信息區fp1文件文件f2的的文件信息區文件信息區fp2文件文件f3的的文件信息區文件信息區fp3整
15、理ppt10.2.1 用用fopen函數打開數據文件函數打開數據文件10.2.2 用用fclose函數關閉數據文件函數關閉數據文件整理ppt對文件讀寫之前應該對文件讀寫之前應該“打開打開”該文件,在該文件,在使用結束之后應使用結束之后應“關閉關閉”該文件。該文件。所謂所謂“打開打開”是指為文件建立相應的信息是指為文件建立相應的信息區區(用來存放有關文件的信息用來存放有關文件的信息)和文件緩沖和文件緩沖區區(用來暫時存放輸入輸出的數據用來暫時存放輸入輸出的數據)。整理ppt在編寫程序時,在打開文件的同時,一般在編寫程序時,在打開文件的同時,一般都指定一個指針變量指向該文件,也就是都指定一個指針變
16、量指向該文件,也就是建立起指針變量與文件之間的聯系,這樣建立起指針變量與文件之間的聯系,這樣就可以通過該指針變量對文件進行讀寫就可以通過該指針變量對文件進行讀寫所謂所謂“關閉關閉”是指撤銷文件信息區和文件是指撤銷文件信息區和文件緩沖區緩沖區 整理pptfopen函數的調用方式為:函數的調用方式為:fopen(文件名文件名,使用文件方式使用文件方式);例如:例如: fopen(“a1”,”r”); u表示要打開名為表示要打開名為“a1”的文件,使用文件方的文件,使用文件方式為式為“讀入讀入”ufopen函數的返回值是指向函數的返回值是指向a1文件的指針文件的指針整理ppt通常將通常將fopen函
17、數的返回值賦給一個指向函數的返回值賦給一個指向文件的指針變量。如:文件的指針變量。如:FILE *fp; fp=fopen(“a1”,”r”);ufp和文件和文件a1相聯系,相聯系,fp指向了指向了a1文件文件整理ppt在打開一個文件時,通知編譯系統以下在打開一個文件時,通知編譯系統以下3個信息:個信息:需要訪問的文件的名字需要訪問的文件的名字使用文件的方式(使用文件的方式(“讀讀”還是還是“寫寫”等)等)讓哪一個指針變量指向被打開的文件讓哪一個指針變量指向被打開的文件使用文件方式使用文件方式參參見見教材教材表表10.1。整理ppt說明:說明:(1) 用用“r”方式打開的文件只能用于向計算機方
18、式打開的文件只能用于向計算機輸入而不能用作向該文件輸出數據,而且該輸入而不能用作向該文件輸出數據,而且該文件應該已經存在,并存有數據,這樣程序文件應該已經存在,并存有數據,這樣程序才能從文件中讀數據。才能從文件中讀數據。u不能用不能用“r”方式打開一個并不存在的文件,方式打開一個并不存在的文件,否則出錯。否則出錯。整理ppt說明:說明:(2) 用用“w”方式打開的文件只能用于向該文方式打開的文件只能用于向該文件寫數據(即輸出文件),而不能用來向計件寫數據(即輸出文件),而不能用來向計算機輸入。算機輸入。u如果原來不存在該文件,則在打開文件前新如果原來不存在該文件,則在打開文件前新建立一個以指定
19、的名字命名的文件。建立一個以指定的名字命名的文件。u如果原來已存在一個以該文件名命名的文件如果原來已存在一個以該文件名命名的文件,則在打開文件前先將該文件刪去,然后重,則在打開文件前先將該文件刪去,然后重新建立一個新文件。新建立一個新文件。整理ppt說明:說明:(3) 如果希望向文件末尾添加新的數據(不希如果希望向文件末尾添加新的數據(不希望刪除原有數據),則應該用望刪除原有數據),則應該用“a”方式打開方式打開u但此時應保證該文件已存在;否則將得到出但此時應保證該文件已存在;否則將得到出錯信息。錯信息。u打開文件時,文件讀寫標記移到文件末尾打開文件時,文件讀寫標記移到文件末尾整理ppt說明:
20、說明:(4) 用用r+、w+、a+方式打開的文件既可以方式打開的文件既可以用來輸入數據,也可以用來輸出數據。用來輸入數據,也可以用來輸出數據。u用用r+方式時該文件應該已經存在。方式時該文件應該已經存在。u用用w+方式則新建立一個文件,先向此文件方式則新建立一個文件,先向此文件寫數據,然后可以讀此文件中的數據。寫數據,然后可以讀此文件中的數據。u用用a+方式打開的文件,原來的文件不被刪去方式打開的文件,原來的文件不被刪去,文件讀寫位置標記移到文件末尾,可以添,文件讀寫位置標記移到文件末尾,可以添加,也可以讀。加,也可以讀。整理ppt說明:說明:(5) 如果打開如果打開失敗失敗,fopen函數將
21、會帶回一個函數將會帶回一個出錯信息。出錯信息。fopen函數將帶回一個空指針值函數將帶回一個空指針值NULL常用下面的方法打開一個文件:常用下面的方法打開一個文件: if (fp=fopen(“file1”,r)=NULL)printf(“cannot open this filen”); exit(0);終止正在執行的程序終止正在執行的程序整理ppt說明:說明:(6) C標準建議用表標準建議用表10.1列出的文件使用方式列出的文件使用方式打開文本文件或二進制文件,但目前使用的打開文本文件或二進制文件,但目前使用的有些有些C編譯系統可能不完全提供所有這些功能編譯系統可能不完全提供所有這些功能整
22、理ppt說明:說明:(7) 計算機輸從計算機輸從ASCII文件讀入字符時,遇到文件讀入字符時,遇到回車換行符,系統把它轉換為一個換行符,回車換行符,系統把它轉換為一個換行符,在輸出時把換行符轉換成為回車和換行兩個在輸出時把換行符轉換成為回車和換行兩個字符。在用二進制文件時,不進行這種轉換字符。在用二進制文件時,不進行這種轉換,在內存中的數據形式與輸出到外部文件中,在內存中的數據形式與輸出到外部文件中的數據形式完全一致,一一對應。的數據形式完全一致,一一對應。整理ppt說明:說明:(8) 程序中可以使用程序中可以使用3個標準的流文件個標準的流文件:標準輸標準輸入流、標準輸出流、標準出錯輸出流。入
23、流、標準輸出流、標準出錯輸出流。u系統已對這系統已對這3個文件指定了與終端的對應關系個文件指定了與終端的對應關系u標準輸入流是從終端的輸入標準輸入流是從終端的輸入u標準輸出流是向終端的輸出標準輸出流是向終端的輸出u標準出錯輸出流是當程序出錯時將出錯信息發標準出錯輸出流是當程序出錯時將出錯信息發送到終端送到終端整理ppt程序開始運行時系統自動打開這程序開始運行時系統自動打開這3個標準個標準流文件。因此,程序編寫者不需要在程序流文件。因此,程序編寫者不需要在程序中用中用fopen函數打開它們。所以以前我函數打開它們。所以以前我們用到的從終端輸入或輸出到終端都不需們用到的從終端輸入或輸出到終端都不需
24、要打開終端文件。要打開終端文件。整理ppt關閉文件用關閉文件用fclose函數。函數。fclose函數調函數調用的一般形式為用的一般形式為fclose(文件指針文件指針); 例如:例如: fclose (fp); 如果不關閉文件將會如果不關閉文件將會丟失丟失數據。數據。整理ppt在順序寫時,先寫入的數據存放在文件中在順序寫時,先寫入的數據存放在文件中前面,后寫入的數據存放在文件中后面前面,后寫入的數據存放在文件中后面在順序讀時,先讀文件中前面的數據,后在順序讀時,先讀文件中前面的數據,后讀文件中后面的數據讀文件中后面的數據對順序讀寫來說,對文件讀寫數據的順序對順序讀寫來說,對文件讀寫數據的順序
25、和數據在文件中的物理順序是一致的和數據在文件中的物理順序是一致的 順序讀寫需要用庫函數實現順序讀寫需要用庫函數實現整理ppt10.3.1 怎樣向文件讀寫字符怎樣向文件讀寫字符10.3.2 怎樣向文件讀寫一個字符串怎樣向文件讀寫一個字符串10.3.3 用格式化的方式讀寫文件用格式化的方式讀寫文件10.3.4 用二進制方式向文件讀寫一組數據用二進制方式向文件讀寫一組數據整理ppt函數名函數名調用形式調用形式功能功能返回值返回值fgetcfgetc(fp)從從fp指向的指向的文件讀入一文件讀入一個字符個字符讀成功,帶回所讀讀成功,帶回所讀的字符,失敗則返的字符,失敗則返回文件結束標志回文件結束標志(
26、即即-1)fputcfputc(ch,fp)把字符把字符ch寫寫到文件指針到文件指針變量變量fp所指所指向的文件中向的文件中寫成功,返回值就寫成功,返回值就是輸出的字符;輸是輸出的字符;輸出失敗,則返回出失敗,則返回(即(即-1)讀寫一個字符的函數讀寫一個字符的函數整理ppt 例例10.1 從鍵盤輸入一些字符,逐個把它從鍵盤輸入一些字符,逐個把它們送到磁盤上去,直到用戶輸入一個們送到磁盤上去,直到用戶輸入一個“”為止。為止。 解題思路:用解題思路:用fgetc函數從鍵盤逐個輸入函數從鍵盤逐個輸入字符,然后用字符,然后用fputc函數寫到磁盤文件即函數寫到磁盤文件即可。可。整理ppt#inclu
27、de #include int main() FILE *fp; char ch,10; printf(請輸入所用的文件名:請輸入所用的文件名:); scanf(%s,); if(fp=fopen(,“w”)=NULL) printf(無法打開此文件無法打開此文件n); exit(0); ch=getchar( );接收最后輸接收最后輸入的回車符入的回車符輸入輸入文件名文件名只寫只寫用用exit函數時加函數時加整理ppt printf(“請輸入一個字符串請輸入一個字符串(以以#結束結束):); ch=getchar( ); while(ch!=#) fputc(ch,fp); putchar(
28、ch); ch=getchar(); fclose(fp); putchar(10); return 0;整理ppt 例例10.2 將一個磁盤文件中的信息復制到另將一個磁盤文件中的信息復制到另一個磁盤文件中。一個磁盤文件中。 今要求將上例建立的文今要求將上例建立的文件中的內容復制到另一個磁盤文件中。件中的內容復制到另一個磁盤文件中。解題思路:處理此問題的算法是:從文件解題思路:處理此問題的算法是:從文件中逐個讀入字符,然后逐個輸出到中。中逐個讀入字符,然后逐個輸出到中。整理ppt#include #include int main( ) FILE *in,*out; char ch,in,ou
29、t; printf(輸入讀入文件的名字輸入讀入文件的名字:); scanf(%s,infile); printf(輸入輸出文件的名字輸入輸出文件的名字:); scanf(“%s”,outfile); if(in=fopen(infile,“r”)=NULL) printf(無法打開此文件無法打開此文件n); exit(0); if(out=fopen(outfile,“w”)=NULL) printf(無法打開此文件無法打開此文件n); exit(0); 改為改為rb和和wb,則,則復復制一個二進制文件制一個二進制文件改為改為rb和和wb,則,則復復制一個二進制文件制一個二進制文件整理ppt
30、while(!feof(in) ch=fgetc(in); fputc(ch,out); putchar(ch); putchar(10); fclose(in); fclose(out); return 0;檢查當前讀寫位置檢查當前讀寫位置是否移到文件末尾是否移到文件末尾整理ppt讀寫一個字符串的函數讀寫一個字符串的函數函數名函數名調用形式調用形式功能功能返回值返回值fgetsfgets(str,n,fp)從從fp指向的文件讀指向的文件讀入長度為入長度為(n-1)的字的字符串,存放到字符符串,存放到字符數組數組str中中讀成功,返讀成功,返回地址回地址str,失敗則返回失敗則返回NULL)f
31、putsfputs(str,fp)str所指向的字符串所指向的字符串寫到文件指針變量寫到文件指針變量fp所指向的文件中所指向的文件中寫成功,返寫成功,返回回 0 ; 否 則; 否 則返回非返回非0值值整理ppt說明:說明:fgets函數的函數原型為:函數的函數原型為: char *fgets (char *str,int n,FILE *fp);u其作用是從文件讀入一個字符串其作用是從文件讀入一個字符串u調用時可以寫成:調用時可以寫成: fgets(str,n,fp);整理ppt說明:說明:ufgets(str,n,fp);中中n是要求得到的字符個數是要求得到的字符個數,但實際上只讀,但實際上
32、只讀n-1個字符,然后在最后加一個個字符,然后在最后加一個0字符,這樣得到的字符串共有字符,這樣得到的字符串共有n個字符,把個字符,把它們放到字符數組它們放到字符數組str中中u如果在讀完如果在讀完n-1個字符之前遇到換行符個字符之前遇到換行符“n”或文件結束符或文件結束符EOF,讀入即結束,但將所遇到,讀入即結束,但將所遇到的換行符的換行符“n”也作為一個字符讀入也作為一個字符讀入u執行執行fgets成功,返回成功,返回str數組首地址,如果一數組首地址,如果一開始就遇到文件尾或讀數據錯,返回開始就遇到文件尾或讀數據錯,返回NULL整理ppt說明:說明:fputs函數的函數原型為:函數的函數
33、原型為: int fputs (char *str, FILE *fp);ustr指向的字符串輸出到指向的字符串輸出到fp所指向的文件中所指向的文件中u調用時可以寫成:調用時可以寫成: fputs(China”,fp);ufputs函數中第一個參數可以是字符串常量、函數中第一個參數可以是字符串常量、字符數組名或字符型指針字符數組名或字符型指針u字符串末尾的字符串末尾的0不輸出不輸出u輸出成功,函數值為;失敗,函數值為輸出成功,函數值為;失敗,函數值為EOF整理ppt 例例10.3 從鍵盤讀入若干個字符串,對它們從鍵盤讀入若干個字符串,對它們按字母大小的順序排序,然后把排好序的字按字母大小的順序
34、排序,然后把排好序的字符串送到磁盤文件中保存。符串送到磁盤文件中保存。解題思路:為解決問題,可分為三個步驟:解題思路:為解決問題,可分為三個步驟:u從鍵盤讀入從鍵盤讀入n個字符串,存放在一個二維字符個字符串,存放在一個二維字符數組中,每一個一維數組存放一個字符串;數組中,每一個一維數組存放一個字符串;u對字符數組中的對字符數組中的n個字符串按字個字符串按字母母順序排序,順序排序,排好序的字符串仍存放在字符數組中;排好序的字符串仍存放在字符數組中;u將字符數組中的字符串順序輸出。將字符數組中的字符串順序輸出。整理ppt#include #include #include int main() F
35、ILE *fp; char str310,temp10; int i,j,k,n=3; printf(“Enter strings:n”); for(i=0;in;i+) gets(stri);整理ppt for(i=0;in-1;i+) k=i; for(j=i+1;j0) k=j; if(k!=i) strcpy(temp,stri); strcpy(stri,strk); strcpy(strk,temp); 整理ppt if(fp=fopen(“D:CCstring.dat”, “w”)=NULL) printf(cant open file!n); exit(0); printf(n
36、The new sequence:n); for(i=0;in;i+) fputs(stri,fp); fputs(“n”,fp); printf(“%sn”,stri); return 0;人為地輸出一個人為地輸出一個n整理ppt思考:思考:u從文件從文件string.dat中讀回字符串,并在中讀回字符串,并在屏幕上顯示屏幕上顯示,應如何編寫程序?,應如何編寫程序?整理ppt#include #include int main() FILE *fp; char str310; int i=0; if(fp=fopen(“D:CCstring.dat”, “r”)=NULL) printf(c
37、ant open file!n);exit(0); while(fgets(stri,10,fp)!=NULL) printf(%s,stri); i+; fclose (fp); return 0;不用不用人為地輸出人為地輸出n整理ppt一般調用方式為:一般調用方式為:fprintf(文件指針文件指針,格式字符串格式字符串,輸出表列輸出表列);fscanf (文件指針文件指針,格式字符串格式字符串,輸入表列輸入表列);如:如:fprintf (fp,”%d,%6.2f”,i,f);fscanf (fp,”%d,%f”,&i,&f);整理ppt一般調用形式為一般調用形式為:fread(buff
38、er,size,count,fp);fwrite(buffer,size,count,fp); 整理pptbuffer:是一個地址:是一個地址u對對fread來說,它是用來存放從文件讀入的來說,它是用來存放從文件讀入的數據的存儲區的地址數據的存儲區的地址u對對fwrite來說,是要把此地址開始的存儲區來說,是要把此地址開始的存儲區中的數據向文件輸出中的數據向文件輸出size:要讀寫的字節數:要讀寫的字節數count:要讀寫多少個數據項:要讀寫多少個數據項fp:FILE類型指針類型指針整理ppt 例例10.4 從鍵盤輸入從鍵盤輸入10個學生的有關數據個學生的有關數據,然后把它們轉存到磁盤文件上去
39、。,然后把它們轉存到磁盤文件上去。 解題思路:解題思路:u定義有定義有10個元素的結構體數組,用來存放個元素的結構體數組,用來存放10個學生的數據個學生的數據u從從main函數輸入函數輸入10個學生的數據個學生的數據u用用save函數實現向磁盤輸出學生數據函數實現向磁盤輸出學生數據u用用fwrite函數一次輸出一個學生的數據函數一次輸出一個學生的數據整理ppt#include #define SIZE 10struct Student_type char name10; int num; int age; char addr15; studSIZE; 整理pptvoid save( ) FIL
40、E *fp; int i; if(fp=fopen(stu.dat,wb)=NULL) printf(cannot open filen); return; for(i=0;iSIZE;i+) if(fwrite(&studi, sizeof(struct Student_type), 1,fp)!=1) printf( errorn); fclose(fp);10+4+4+15=33,實際上,實際上開辟開辟36字節,是字節,是4的倍數的倍數當前路徑下的文件當前路徑下的文件整理pptint main() int i; printf(“enter data of students:n); for
41、(i=0;iSIZE;i+) scanf(%s%d%d%s, ,&studi.num, &studi.age,studi.addr); save( ); return 0;整理ppt為了驗證在磁盤文件為了驗證在磁盤文件“stu.dat”中是否中是否已存在此數據,可以用以下程序從已存在此數據,可以用以下程序從“stu.dat”文件中讀入數據,然后在屏文件中讀入數據,然后在屏幕上輸出。幕上輸出。整理ppt#include #include #define SIZE 10struct Student_type char name10; int num; int age; char
42、 addr15;studSIZE; 整理pptint main( )int i; FILE *fp; if(fp=fopen(stu.dat,rb)=NULL) printf(cannot open filen); exit(0); for(i=0;iSIZE;i+) fread (&studi,sizeof(struct Student_type),1,fp); printf (“%-10s %4d %4d %-15sn”, ,studi.num, studi. age,studi.addr); fclose (fp); return 0;整理ppt 如果修改如果修改例例
43、10.4:從:從已有的二進制已有的二進制文件文件“stu.list”中,讀入數據并輸出到中,讀入數據并輸出到“stu.dat”文件中文件中,應如何修改程序?,應如何修改程序? 解題思路:解題思路:u編寫編寫load函數函數umain函數中再調用函數中再調用load函數函數整理pptvoid load( ) FILE *fp; int i; if(fp=fopen(stu_list,rb)=NULL) printf(cannot open infilen); return; for(i=0;iSIZE;i+) if(fread(&studi,sizeof(struct student_type)
44、,1,fp)!=1) if(feof(fp) fclose(fp); return; printf( errorn); fclose (fp);整理pptint main() load(); save(); return 0;整理ppt對文件進行順序讀寫比較容易理解,也容對文件進行順序讀寫比較容易理解,也容易操作,但有時效率不高易操作,但有時效率不高隨機訪問不是按數據在文件中的物理位置隨機訪問不是按數據在文件中的物理位置次序進行讀寫,而是可以對任何位置上的次序進行讀寫,而是可以對任何位置上的數據進行訪問,顯然這種方法比順序訪問數據進行訪問,顯然這種方法比順序訪問效率高得多效率高得多整理ppt1
45、0.4.1 文件位置標記及其定位文件位置標記及其定位10.4.2 隨機讀寫隨機讀寫整理ppt1.文件位置標記文件位置標記為了對讀寫進行控制,系統為每個文為了對讀寫進行控制,系統為每個文件設置了一個文件讀寫位置標記件設置了一個文件讀寫位置標記(簡簡稱文件標記稱文件標記),用來指示,用來指示“接下來要接下來要讀寫的下一個字符的位置讀寫的下一個字符的位置”整理ppt文件指針文件指針讀寫當前位置讀寫當前位置文件尾文件尾1.文件位置標記文件位置標記文件頭文件頭整理ppt1.文件位置標記文件位置標記一般情況下,在對字符文件進行順序讀一般情況下,在對字符文件進行順序讀寫時,文件標記指向文件開頭,進行讀寫時,
46、文件標記指向文件開頭,進行讀的操作的操作時時,就讀第一個字符,然后文件,就讀第一個字符,然后文件標記向后移一個位置,在下一次讀操作標記向后移一個位置,在下一次讀操作時,就將位置標記指向的第二個字符讀時,就將位置標記指向的第二個字符讀入。依此類推,直到遇文件尾,結束入。依此類推,直到遇文件尾,結束整理ppt1.文件位置標記文件位置標記如果是順序寫文件,則每寫完一個數據如果是順序寫文件,則每寫完一個數據后,文件標記順序向后移一個位置,然后,文件標記順序向后移一個位置,然后在下一次執行寫操作時把數據寫入指后在下一次執行寫操作時把數據寫入指針所指的位置。直到把全部數據寫完,針所指的位置。直到把全部數據
47、寫完,此時文件位置標記在最后一個數據之后此時文件位置標記在最后一個數據之后整理ppt1.文件位置標記文件位置標記可以根據讀寫的需要,人為地移動了文可以根據讀寫的需要,人為地移動了文件標記的位置。文件標記可以向前移、件標記的位置。文件標記可以向前移、向后移,移到文件頭或文件尾,然后對向后移,移到文件頭或文件尾,然后對該位置進行讀寫該位置進行讀寫隨機讀寫隨機讀寫隨機讀寫隨機讀寫可以在任何位置寫入數據,在可以在任何位置寫入數據,在任何位置讀取數據任何位置讀取數據整理ppt2. 文件位置標記的定位文件位置標記的定位u可以強制使文件位置標記指向指定的位置可以強制使文件位置標記指向指定的位置u可以用以下函
48、數實現可以用以下函數實現:(1)用用rewind函數使文件標記指向文件開頭函數使文件標記指向文件開頭 rewind函數的作用是使文件標記重新返回文函數的作用是使文件標記重新返回文件的開頭,此函數沒有返回值。件的開頭,此函數沒有返回值。整理ppt 例例10.5 有一個磁盤文件,內有一些信息。有一個磁盤文件,內有一些信息。要求第一次將它的內容顯示在屏幕上,第要求第一次將它的內容顯示在屏幕上,第二次把它復制到另一文件上二次把它復制到另一文件上。整理ppt解題思路:解題思路:u因為在第一次讀入完文件內容后,文件標因為在第一次讀入完文件內容后,文件標記已指到文件的末尾,如果再接著讀數據記已指到文件的末尾
49、,如果再接著讀數據,就遇到文件結束標志,就遇到文件結束標志,feof函數的值等函數的值等于于1(真真),無法再讀數據,無法再讀數據u必須在程序中用必須在程序中用rewind函數使位置指針函數使位置指針返回文件的開頭返回文件的開頭整理ppt#includeint main() FILE *fp1,*fp2; fp1=fopen(“”,“r”); fp2=fopen(“”,“w”); while(!feof(fp1) putchar(getc(fp1); putchar(10); rewind(fp1); while(!feof(fp1) putc(getc(fp1),fp2); fclose(f
50、p1); fclose(fp2); return 0;整理ppt2. 文件位置標記的定位文件位置標記的定位u可以強制使文件標記指向指定的位置可以強制使文件標記指向指定的位置u可以用以下函數實現可以用以下函數實現:(2) 用用fseek函數改變文件標記函數改變文件標記fseek函數的調用形式為函數的調用形式為:fseek(文件類型指針文件類型指針,位移量位移量,起始點起始點) u起始點起始點0代表代表“文件開始位置文件開始位置”,1為為“當前當前位置位置”,2為為“文件末尾位置文件末尾位置”整理ppt標準指定的名字標準指定的名字起始點起始點名名 字字用數字代表用數字代表文件開始位置文件開始位置SEEK_SET0文件當前位置文件當前位置SEEK_CUR1文件末尾位置文件末尾位置SEEK_END2整理ppt位移量指以起始點為基點,向前移動的字位移量指以起始點為基點,向前移動的字節數。位移量應是節數。位移量應是long型數據型數據(在數字的在數字的末尾加一個字母末尾加一個字母L)。fseek函數一般用于二進制文件。下面是函數一般用于二進制文件。下面是fseek函數調用的幾個例子:函數調用的幾個例子: ufseek (fp,100L,0); ufseek (fp,50L,1); ufseek (fp
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 少兒鋼琴教學課件
- 教學課件怎么講課
- 如何教學一年級數學課件
- 敬英雄班會課件
- 定做美術教學課件
- 中國公司治理案例分析-國美
- 教育課件模板
- 讀思達教學法語文課件
- 湖南婁底雙峰縣2025年事業單位公開招聘工作人員筆試歷年典型考題及考點剖析附帶答案詳解
- 2025年北京市密云區公開招聘事業單位122人筆試歷年典型考題及考點剖析附帶答案詳解
- 網絡游戲代理合同通用版范文(2篇)
- GB/T 6414-1999鑄件尺寸公差與機械加工余量
- GB/T 27773-2011病媒生物密度控制水平蜚蠊
- GB/T 12817-1991鐵道客車通用技術條件
- 質量風險識別項清單及防控措施
- 【課件超聲】常見的超聲效應與圖象偽差
- 外墻保溫、真石漆工程施工方案
- 自然指數NatureIndex(NI)收錄的68種自然科學類期刊
- 建立良好的同伴關系-課件-高二心理健康
- 老年人健康管理隨訪表
- 物理學與現代高科技課件
評論
0/150
提交評論