《C語言程序設(shè)計(jì)》 課件 蔡玲芳 第九章 文件_第1頁
《C語言程序設(shè)計(jì)》 課件 蔡玲芳 第九章 文件_第2頁
《C語言程序設(shè)計(jì)》 課件 蔡玲芳 第九章 文件_第3頁
《C語言程序設(shè)計(jì)》 課件 蔡玲芳 第九章 文件_第4頁
《C語言程序設(shè)計(jì)》 課件 蔡玲芳 第九章 文件_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

C文件的基本知識(shí)C語言程序設(shè)計(jì)文件把輸入和輸出的數(shù)據(jù)以文件的形式保存在計(jì)算機(jī)的外存儲(chǔ)器上,可以確保數(shù)據(jù)能隨時(shí)使用,避免反復(fù)輸入和讀取數(shù)據(jù)。文件是指一組相關(guān)數(shù)據(jù)的有序集合。文件是存儲(chǔ)數(shù)據(jù)的基本單位,可以通過讀取文件訪問數(shù)據(jù)。分類

可以按照不同角度對(duì)文件進(jìn)行分類:按存儲(chǔ)介質(zhì)不同可以分為磁盤文件、磁帶文件、打印文件等。按存儲(chǔ)內(nèi)容不同可以分為程序文件和數(shù)據(jù)文件。按訪問方式不同可以分為順序文件、隨機(jī)文件和二進(jìn)制文件。按用戶不同可以分為普通文件和設(shè)備文件。1.從用戶角度劃分普通文件存儲(chǔ)在磁盤或其他外部介質(zhì)上的一個(gè)有序數(shù)據(jù)集合,如程序文件、數(shù)據(jù)文件等。設(shè)備文件將與主機(jī)相連的外部設(shè)備作為文件對(duì)待,把通過它們而進(jìn)行的輸入、輸出等同于磁盤的讀寫操作。三個(gè)標(biāo)準(zhǔn)設(shè)備文件:標(biāo)準(zhǔn)輸入文件(鍵盤)、標(biāo)準(zhǔn)輸出文件(顯示器)和標(biāo)準(zhǔn)錯(cuò)誤信息文件(通常為顯示器)。1.從文件編碼方式劃分ASCII文件以字符形式順序保存每個(gè)字符的ASCII碼值。二進(jìn)制文件以二進(jìn)制編碼形式保存各數(shù)據(jù),與數(shù)據(jù)在內(nèi)存中的存儲(chǔ)形式完全一致。例如:整數(shù)1234保存為ASCII文件(4個(gè)字節(jié)):00110001001100100011001100110100;保存為二進(jìn)制文件為(2個(gè)字節(jié)):0000010011010010。1.從文件編碼方式劃分

例如:短整數(shù)968(0000001111001000B):如果按ASCII碼的形式輸出則占3個(gè)字節(jié)(每個(gè)字符占1個(gè)字節(jié))而按二進(jìn)制形式輸出,則在磁盤上占2個(gè)字節(jié)。C語言文件分類C語言版本不同,對(duì)文件的處理方式也各有不同,主要有兩種方法:一種是“緩沖文件系統(tǒng)”01一種是“非緩沖文件系統(tǒng)”02文件名D:\CC\temp\file1.dat

↓↓↓文件路徑文件主干名文件后綴一個(gè)文件要有一個(gè)唯一的文件標(biāo)識(shí),以便用戶識(shí)別和引用。文件標(biāo)識(shí)包括3部分:(1)文件路徑;(2)文件名主干;(3)文件后綴。文件路徑表示文件在外部存儲(chǔ)設(shè)備中的位置。文件名主干的命名規(guī)則遵循標(biāo)識(shí)符的命名規(guī)則。文件后綴用來表示文件的性質(zhì)。為方便起見,文件標(biāo)識(shí)常被稱為文件名,但應(yīng)了解此時(shí)所稱的文件名,實(shí)際上包括以上3部分內(nèi)容,而不僅是文件名主干。根據(jù)數(shù)據(jù)的組織形式,數(shù)據(jù)文件可分為ASCII文件和二進(jìn)制文件。數(shù)據(jù)在內(nèi)存中是以二進(jìn)制形式存儲(chǔ)的,如果不加轉(zhuǎn)換地輸出到外存,就是二進(jìn)制文件,可以認(rèn)為它就是存儲(chǔ)在內(nèi)存的數(shù)據(jù)的映像,所以也稱之為映像文件(imagefile)。如果要求在外存上以ASCII代碼形式存儲(chǔ),則需要在存儲(chǔ)前進(jìn)行轉(zhuǎn)換。ASCII文件又稱文本文件(textfile),每一個(gè)字節(jié)存放一個(gè)字符的ASCII代碼。字符一律以ASCII形式存儲(chǔ),數(shù)值型數(shù)據(jù)既可以用ASCII形式存儲(chǔ),也可以用二進(jìn)制形式存儲(chǔ)。用ASCII碼形式輸出時(shí)字節(jié)與字符一一對(duì)應(yīng),一個(gè)字節(jié)代表一個(gè)字符,因而便于對(duì)字符進(jìn)行逐個(gè)處理,也便于輸出字符。但一般占存儲(chǔ)空間較多,而且要花費(fèi)轉(zhuǎn)換時(shí)間(二進(jìn)制形式與ASCII碼間的轉(zhuǎn)換)。用二進(jìn)制形式輸出數(shù)值,可以節(jié)省外存空間和轉(zhuǎn)換時(shí)間,把內(nèi)存中的存儲(chǔ)單元中的內(nèi)容原封不動(dòng)地輸出到磁盤(或其他外部介質(zhì))上,此時(shí)每一個(gè)字節(jié)并不一定代表一個(gè)字符。文件的分類ASCII形式0011000100110000001100000011000000110000內(nèi)存中存儲(chǔ)形式(1)(0)(0)(0)(0)00000000000000000010011100010000二進(jìn)制形式00000000000000000010011100010000ANSIC標(biāo)準(zhǔn)采用“緩沖文件系統(tǒng)”處理數(shù)據(jù)文件,所謂緩沖文件系統(tǒng)是指系統(tǒng)自動(dòng)地在內(nèi)存區(qū)為程序中每一個(gè)正在使用的文件開辟一個(gè)文件緩沖區(qū)。從內(nèi)存向磁盤輸出數(shù)據(jù)必須先送到內(nèi)存中的緩沖區(qū),裝滿緩沖區(qū)后才一起送到磁盤去。如果從磁盤向計(jì)算機(jī)讀入數(shù)據(jù),則一次從磁盤文件將一批數(shù)據(jù)輸入到內(nèi)存緩沖區(qū)(充滿緩沖區(qū)),然后再從緩沖區(qū)逐個(gè)地將數(shù)據(jù)送到程序數(shù)據(jù)區(qū)(給程序變量)。這樣做是為了節(jié)省存取時(shí)間,提高效率,緩沖區(qū)的大小由各個(gè)具體的C編譯系統(tǒng)確定。說明:每一個(gè)文件在內(nèi)存中只有一個(gè)緩沖區(qū),在向文件輸出數(shù)據(jù)時(shí),它就作為輸出緩沖區(qū),在從文件輸入數(shù)據(jù)時(shí),它就作為輸入緩沖區(qū)。文件緩沖區(qū)輸出文件緩沖區(qū)

程序數(shù)據(jù)區(qū)輸入文件緩沖區(qū)

磁盤輸出輸入輸出輸入文件類型指針緩沖文件系統(tǒng)中,關(guān)鍵的概念是“文件類型指針”,簡稱“文件指針”。每個(gè)被使用的文件都在內(nèi)存中開辟一個(gè)相應(yīng)的文件信息區(qū),用來存放文件的有關(guān)信息(如文件的名字、文件狀態(tài)及文件當(dāng)前位置等)。這些信息是保存在一個(gè)結(jié)構(gòu)體變量中的。該結(jié)構(gòu)體類型是由系統(tǒng)聲明的,取名為FILE。typedefstruct{ shortlevel; //緩沖區(qū)“滿”或“空”的程度

unsignedflags; //文件狀態(tài)標(biāo)志

charfd; //文件描述符

unsignedcharhold; //如緩沖區(qū)無內(nèi)容不讀取字符

shortbsize; //緩沖區(qū)的大小

unsignedchar*buffer; //數(shù)據(jù)緩沖區(qū)的位置

unsignedchar*curp; //文件位置標(biāo)記指針當(dāng)前的指向

unsignedistemp; //臨時(shí)文件指示器

shorttoken; //用于有效性檢查}FILE;一種C編譯環(huán)境提供的stdio.h頭文件中有以下的文件類型聲明文件類型指針FILE*fp;//定義一個(gè)指向FILE類型數(shù)據(jù)的指針變量可以使fp指向某一個(gè)文件的文件信息區(qū)(是一個(gè)結(jié)構(gòu)體變量),通過該文件信息區(qū)中的信息就能夠訪問該文件。也就是說,通過文件指針變量能夠找到與它關(guān)聯(lián)的文件。如果有n個(gè)文件,應(yīng)設(shè)n個(gè)指針變量,分別指向n個(gè)FILE類型變量,以實(shí)現(xiàn)對(duì)n個(gè)文件的訪問。為方便起見,通常將這種指向文件信息區(qū)的指針變量簡稱為指向文件的指針變量。fp1文件f1的文件信息區(qū)fp2文件f2的文件信息區(qū)fp3文件f3的文件信息區(qū)注意指向文件的指針變量并不是指向外部介質(zhì)上的數(shù)據(jù)文件的開頭,而是指向內(nèi)存中的文件信息區(qū)的開頭。感謝觀看文件的打開與關(guān)閉C語言程序設(shè)計(jì)文件的打開與關(guān)閉

C語言中文件操作一般包括三個(gè)步驟:01用fopen函數(shù)打開文件02進(jìn)行讀寫操作03用fclose函數(shù)關(guān)閉文件打開與關(guān)閉文件對(duì)文件讀寫之前應(yīng)該“打開”該文件,在使用結(jié)束之后應(yīng)“關(guān)閉”該文件。所謂“打開”是指為文件建立相應(yīng)的信息區(qū)(用來存放有關(guān)文件的信息)和文件緩沖區(qū)(用來暫時(shí)存放輸入輸出的數(shù)據(jù))。在編寫程序時(shí),在打開文件的同時(shí),一般都指定一個(gè)指針變量指向該文件,也就是建立起指針變量與文件之間的聯(lián)系,這樣,就可以通過該指針變量對(duì)文件進(jìn)行讀寫了。所謂“關(guān)閉”是指撤銷文件信息區(qū)和文件緩沖區(qū),使文件指針變量不再指向該文件,顯然就無法進(jìn)行對(duì)文件的讀寫了。fopen函數(shù)fopen函數(shù)用于打開文件,并把結(jié)果賦給FILE指針變量,它的一般形式為:“文件名”是要打開的文件名,可以是完整的文件路徑FILE*fp;//fp是一個(gè)指向FILE結(jié)構(gòu)體類型的指針變量fp=fopen("file_data.txt","r");//以只讀方式打開文件file_data.txtfopen(文件名,文件打開方式);Fp為文件指針,每一個(gè)打開的文件必須對(duì)應(yīng)一個(gè)單獨(dú)的文件指針變量。“文件名”為要打開的文件的名字,通常為字符串形式,可以包括文件路徑。“文件使用方式”指定文件的類型(文本文件或二進(jìn)制文件)和打開后的操作方式(讀、寫、追加)。fopen函數(shù)說明:r:只讀,用于向程序輸入數(shù)據(jù),要求文件已經(jīng)存在,若文件不存在則返回空指針NULL。w:只寫,用于向文件輸出數(shù)據(jù)。若文件已經(jīng)存在則將文件刪除,否則創(chuàng)建新的空文件。a:追加,用于向已存在的文件追加數(shù)據(jù)。若文件不存在,則提示出錯(cuò)。文本文件:r,w,a,r+,w+,a+二進(jìn)制文件:rb,wb,ab,rb+,wb+,ab+“文件使用方式”包括:含義為:用fopen函數(shù)打開數(shù)據(jù)文件

fopen(文件名,使用文件方式);使用文件方式文件使用方式含義如果指定的文件不存在“r”(只讀)為了輸入數(shù)據(jù),打開一個(gè)已存在的文本文件出錯(cuò)“w”(只寫)為了輸出數(shù)據(jù),打開一個(gè)文本文件建立新文件“a”(追加)向文本文件尾添加數(shù)據(jù)出錯(cuò)“rb”(只讀)為了輸入數(shù)據(jù),打開一個(gè)二進(jìn)制文件出錯(cuò)“wb”(只寫)為了輸出數(shù)據(jù),打開一個(gè)二進(jìn)制文件建立新文件“ab”(追加)向二進(jìn)制文件尾添加數(shù)據(jù)出錯(cuò)“r+”(讀寫)為了讀和寫,打開一個(gè)文本文件出錯(cuò)“w+”(讀寫)為了讀和寫,建立一個(gè)新的文本文件建立新文件“a+”(讀寫)為了讀和寫,打開一個(gè)文本文件出錯(cuò)“rb+”(讀寫)為了讀和寫,打開一個(gè)二進(jìn)制文件出錯(cuò)“wb+”(讀寫)為了讀和寫,建立一個(gè)新的二進(jìn)制文件建立新文件“ab+”(讀寫)為讀寫打開一個(gè)二進(jìn)制文件出錯(cuò)用fopen函數(shù)打開數(shù)據(jù)文件(1)用“r”方式打開的文件只能用于向計(jì)算機(jī)輸入而不能用作向該文件輸出數(shù)據(jù),而且該文件應(yīng)該已經(jīng)存在,并存有數(shù)據(jù),這樣程序才能從文件中讀數(shù)據(jù)。不能用“r”方式打開一個(gè)并不存在的文件,否則出錯(cuò)。(2)用“w”方式打開的文件只能用于向該文件寫數(shù)據(jù)(即輸出文件),而不能用來向計(jì)算機(jī)輸入。如果原來不存在該文件,則在打開文件前新建立一個(gè)以指定的名字命名的文件。如果原來已存在一個(gè)以該文件名命名的文件,則在打開文件前先將該文件刪去,然后重新建立一個(gè)新文件。(3)如果希望向文件末尾添加新的數(shù)據(jù)(不希望刪除原有數(shù)據(jù)),則應(yīng)該用“a”方式打開。但此時(shí)應(yīng)保證該文件已存在;否則將得到出錯(cuò)信息。在每個(gè)數(shù)據(jù)文件中自動(dòng)設(shè)置了一個(gè)隱式的“文件讀寫位置標(biāo)記”,它指向的位置就是當(dāng)前進(jìn)行讀寫的位置。如果“文件讀寫位置標(biāo)記”在文件開頭,則下一次的讀寫就是文件開頭的數(shù)據(jù)。然后“文件讀寫位置標(biāo)記”自動(dòng)移到下一個(gè)讀寫位置,以便讀寫下一個(gè)數(shù)據(jù)。以添加方式打開文件時(shí),文件讀寫位置標(biāo)記移到文件末尾。(4)用“r+”“w+”“a+”方式打開的文件既可用來輸入數(shù)據(jù),也可用來輸出數(shù)據(jù)。

fopen(文件名,使用文件方式);用fopen函數(shù)打開數(shù)據(jù)文件if((fp=fopen(″file1″,″r″))==NULL){ printf(″cannotopenthisfile\n″); exit(0);}打開一個(gè)文件的常用方法

fopen(文件名,使用文件方式);(5)如果不能實(shí)現(xiàn)“打開”的任務(wù),fopen函數(shù)將會(huì)帶回一個(gè)空指針值NULL。(6)C標(biāo)準(zhǔn)建議用表10.1列出的文件使用方式打開文本文件或二進(jìn)制文件,但目前使用的有些C編譯系統(tǒng)可能不完全提供所有這些功能,需要注意所用系統(tǒng)的規(guī)定。(7)有12種文件使用方式,其中有6種是在第一個(gè)字母后面加了字母b的(如rb,wb,ab,rb+,wb+,ab+),b表示二進(jìn)制方式。其實(shí),帶b和不帶b只有一個(gè)區(qū)別,即對(duì)換行的處理。由于在C語言用一個(gè)′\n′即可實(shí)現(xiàn)換行,而在Windows系統(tǒng)中為實(shí)現(xiàn)換行必須要用“回車”和“換行”兩個(gè)字符,即′\r′和′\n′。因此,如果使用的是文本文件并且用“w”方式打開,在向文件輸出時(shí),遇到換行符′\n′時(shí),系統(tǒng)就把它轉(zhuǎn)換為′\r′和′\n′兩個(gè)字符,否則在Windows系統(tǒng)中查看文件時(shí),各行連成一片,無法閱讀。同樣,如果有文本文件且用“r”方式打開,從文件讀入時(shí),遇到′\r′和′\n′兩個(gè)連續(xù)的字符,就把它們轉(zhuǎn)換為′\n′一個(gè)字符。如果使用的是二進(jìn)制文件,在向文件讀寫時(shí),不需要這種轉(zhuǎn)換。加b表示使用的是二進(jìn)制文件,系統(tǒng)就不進(jìn)行轉(zhuǎn)換。用fopen函數(shù)打開數(shù)據(jù)文件

fopen(文件名,使用文件方式);(8)如果用“wb”的文件使用方式,并不意味著在文件輸出時(shí)把內(nèi)存中按ASCII形式保存的數(shù)據(jù)自動(dòng)轉(zhuǎn)換成二進(jìn)制形式存儲(chǔ)。輸出的數(shù)據(jù)形式是由程序中采用什么讀寫語句決定的。例如,用fscanf和fprintf函數(shù)是按ASCII方式進(jìn)行輸入輸出,而fread和fwrite函數(shù)是按二進(jìn)制進(jìn)行輸入輸出。(9)程序中可以使用3個(gè)標(biāo)準(zhǔn)的流文件——標(biāo)準(zhǔn)輸入流、標(biāo)準(zhǔn)輸出流和標(biāo)準(zhǔn)出錯(cuò)輸出流。系統(tǒng)已對(duì)這3個(gè)文件指定了與終端的對(duì)應(yīng)關(guān)系。標(biāo)準(zhǔn)輸入流是從終端的輸入,標(biāo)準(zhǔn)輸出流是向終端的輸出,標(biāo)準(zhǔn)出錯(cuò)輸出流是當(dāng)程序出錯(cuò)時(shí)將出錯(cuò)信息發(fā)送到終端。程序開始運(yùn)行時(shí)系統(tǒng)自動(dòng)打開這3個(gè)標(biāo)準(zhǔn)流文件。對(duì)fopen函數(shù)的補(bǔ)充說明:用fopen函數(shù)打開數(shù)據(jù)文件

例如:要以只寫方式打開當(dāng)前目錄下的文本文件result.txt,可采用如下形式:FILE*fp;Fp=fopen(“result.txt”,”w”);01文件打開成功02文件打開失敗fopen函數(shù)fopen函數(shù),會(huì)由于無法打開指定文件而出現(xiàn)錯(cuò)誤。如果出錯(cuò),fopen函數(shù)會(huì)返回一個(gè)空指針值NULL(NULL在stdio.h中被定義為0)。FILE*fp;if((fp=fopen("file_data.

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論