版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
文件文件的基本概念8.1常用文件操作的基本函數(shù)8.28.1文件的基本概念
計(jì)算機(jī)信息系統(tǒng)中,根據(jù)信息的存儲(chǔ)時(shí)間,可以分為臨時(shí)性信息和永久性信息。簡單來說,臨時(shí)信息存儲(chǔ)在計(jì)算機(jī)系統(tǒng)臨時(shí)存儲(chǔ)設(shè)備(例如存儲(chǔ)在計(jì)算機(jī)內(nèi)存),這類信息隨系統(tǒng)斷電而丟失。永久性信息存儲(chǔ)在計(jì)算機(jī)的永久性存儲(chǔ)設(shè)備(例如存儲(chǔ)在磁盤和光盤)。永久性的最小存儲(chǔ)單元為文件,因此文件管理是計(jì)算機(jī)系統(tǒng)中的一個(gè)重要的問題。一般來說,每臺(tái)計(jì)算機(jī)都有一個(gè)操作系統(tǒng)負(fù)責(zé)管理計(jì)算機(jī)的各種資源。操作系統(tǒng)的文件系統(tǒng)負(fù)責(zé)將外部設(shè)備(如硬盤、打印機(jī)、光驅(qū)等)的信息組織方式進(jìn)行統(tǒng)一規(guī)劃,提供統(tǒng)一的程序訪問數(shù)據(jù)的方法。8.1.1文件概述
對于操作系統(tǒng)來說,文件是存儲(chǔ)在磁盤上的一個(gè)信息序列,操作系統(tǒng)為這個(gè)信息序列起一個(gè)名稱,這個(gè)名稱就叫做文件名(或文件標(biāo)識符)。由于文件存儲(chǔ)在外存中,外存的信息相對于內(nèi)存來說是海量的,而且出于安全、規(guī)范的角度,不能夠允許程序隨意使用外存的信息,因此,當(dāng)程序要使用文件時(shí)必須向操作系統(tǒng)申請使用,操作系統(tǒng)按規(guī)則授權(quán)給程序后程序才可以使用,使用完畢后,程序應(yīng)該通知操作系統(tǒng)。8.1.1文件概述緩沖區(qū):是在內(nèi)存中開辟的一段區(qū)域,當(dāng)程序需要從外存中讀取文件數(shù)據(jù)時(shí),系統(tǒng)先讀入足夠多的數(shù)據(jù)到緩沖區(qū)中,然后程序?qū)彌_區(qū)中的數(shù)據(jù)進(jìn)行處理。當(dāng)程序需要寫數(shù)據(jù)到外存文件中時(shí),同樣要先把數(shù)據(jù)送入緩沖區(qū)中,等緩沖區(qū)滿了后,再一起存入外存中。所以程序?qū)嶋H上是通過緩沖區(qū)讀寫文件的。數(shù)據(jù)存儲(chǔ)緩沖區(qū)從C語言的角度看,文件實(shí)際上是一個(gè)存儲(chǔ)在外存中的由一串連續(xù)字符(字節(jié))構(gòu)成的任意信息序列,即字符流。C程序需要按照特定的規(guī)則去訪問這個(gè)序列。C語言中的文件是邏輯的概念,除了大家熟悉的普通文件外,所有能進(jìn)行輸入輸出的設(shè)備都被看做是文件,如打印機(jī)、磁盤機(jī)和用戶終端等。8.1.1文件概述終端文件中有3個(gè)文件是特殊的,每個(gè)C程序都用到。這3個(gè)文件是:標(biāo)準(zhǔn)輸入文件(stdin)對應(yīng)鍵盤,標(biāo)準(zhǔn)輸出文件(stdout)對應(yīng)終端屏幕,標(biāo)準(zhǔn)出錯(cuò)信息文件(stderr)對應(yīng)終端屏幕。這3個(gè)文件對所有的C程序都是自動(dòng)設(shè)置和打開的。當(dāng)程序調(diào)用getchar()和scanf()時(shí),就是從標(biāo)準(zhǔn)輸入文件(鍵盤)讀取信息;調(diào)用putchar()和printf()就是向標(biāo)準(zhǔn)輸出文件(屏幕)輸出信息。8.1.1文件概述8.1.2文件的類別對于操作系統(tǒng)來說,文件就是一個(gè)由字節(jié)為單位的信息流序列。如果將C語言涉及的所有數(shù)據(jù)存儲(chǔ)在文件中,必然有一個(gè)約定規(guī)則。一個(gè)整數(shù)存儲(chǔ)在文件中可以有多種方式。如整數(shù)28036存儲(chǔ)在文件可直接存儲(chǔ)2個(gè)字節(jié)0x0B和0x14,也可以直接存儲(chǔ)它的正文方式——‘2’、‘8’、‘0’、‘3’、‘6’。前者稱為二進(jìn)制方式,后者稱為文本方式(亦稱正文方式)。1.文本文件文本文件是一種典型的順序文件,其文件的邏輯結(jié)構(gòu)又屬于流式文件。文本文件是指以ASCII碼方式(也稱文本方式)存儲(chǔ)的文件,更確切地說,英文、數(shù)字等字符存儲(chǔ)的是ASCII碼,而漢字存儲(chǔ)的是機(jī)內(nèi)碼。文本文件中除了存儲(chǔ)文件有效字符信息,包括能用ASCII碼字符表示的回車、換行等信息外,不能存儲(chǔ)其他任何信息,因此文本文件不能存儲(chǔ)聲音、動(dòng)畫、圖像、視頻等信息。文本文件是把數(shù)據(jù)當(dāng)做一個(gè)一個(gè)字符存儲(chǔ)起來的相應(yīng)碼值,在采用ASCII碼的計(jì)算機(jī)系統(tǒng)中存放的就是字符ASCII碼,可見文本文件具有以下的特點(diǎn):(1)方便人工閱讀,并且可以直接采用編輯工具輸入、閱讀、修改文本文件的數(shù)據(jù)。(2)文本文件存儲(chǔ)數(shù)據(jù)無需太多的規(guī)定,可以將簡單類型的數(shù)據(jù)直接寫入到文本文件中,對于結(jié)構(gòu)等非簡單數(shù)據(jù)存儲(chǔ)到文本文件中就必須逐個(gè)分量讀寫。(3)內(nèi)存中的數(shù)據(jù)存儲(chǔ)形式和存儲(chǔ)到文本文件中的數(shù)據(jù)存儲(chǔ)形式不一致,因此所有需要存儲(chǔ)到文本文件中的數(shù)據(jù)必須先轉(zhuǎn)換為文本,這本身需要時(shí)間。1.文本文件2.二進(jìn)制文件
文件作為信息存儲(chǔ)的一個(gè)基本單位,根據(jù)其存儲(chǔ)信息的方式不同,分為文本文件(又名ASCII文件)和二進(jìn)制文件。如果將存儲(chǔ)的信息采用字符串方式來保存,那么稱此類文件為文本文件。如果將存儲(chǔ)的信息嚴(yán)格按其在內(nèi)存中的存儲(chǔ)形式來保存,則稱此類文件為二進(jìn)制文件。二進(jìn)制文件是按照數(shù)據(jù)的二進(jìn)制代碼形式直接存入到文件中,二進(jìn)制文件的特點(diǎn):(1)直接將字節(jié)流寫入文件,方便快捷。不需要作過多的轉(zhuǎn)換,節(jié)約時(shí)間、空間。(2)存放到二進(jìn)制文件中的數(shù)據(jù)代碼和內(nèi)存中的數(shù)據(jù)代碼是一致的。(3)可以存儲(chǔ)任意內(nèi)存數(shù)據(jù),只需要將數(shù)據(jù)作為一塊二進(jìn)制序列即可。2.二進(jìn)制文件
8.1.3文件指針在C語言中定義了一個(gè)結(jié)構(gòu)體數(shù)據(jù)類型FILE來描述文件信息,在“stdio.h”中具體的定義如下:typedefstruct{shortleve1;unsignedflags;charfd;unsignedcharhold;shortbsize;unsignedchar*buffer;unsignedchar*curp;unsignedistemp;shorttoken;}FILE;8.1.3文件指針在C語言中用一個(gè)指針變量指向一個(gè)文件,這個(gè)指針稱為文件指針。引入FILE類型之后,就可以定義文件指針了。定義說明文件指針的一般形式為:FILE*指針變量標(biāo)識符;其中FILE應(yīng)為大寫,它是由系統(tǒng)定義的一個(gè)結(jié)構(gòu),該結(jié)構(gòu)中含有文件名、文件狀態(tài)和文件當(dāng)前位置等信息。在編寫源程序時(shí)不必關(guān)心FILE結(jié)構(gòu)的細(xì)節(jié)。例如:FILE*fp;表示fp是指向FILE結(jié)構(gòu)的指針變量,通過fp即可找存放某個(gè)文件信息的結(jié)構(gòu)變量,然后按結(jié)構(gòu)變量提供的信息找到該文件,實(shí)施對文件的操作。習(xí)慣上也籠統(tǒng)地把fp稱為指向一個(gè)文件的指針。8.1.4文件的操作流程C語言對緩沖文件系統(tǒng)的使用是通過一系列庫函數(shù)來實(shí)現(xiàn),讀寫文件必須遵循一定的步驟。C程序打開文件C程序?qū)ξ募M(jìn)行讀寫操作系統(tǒng)判斷 C程序發(fā)出關(guān)閉命令
操作系統(tǒng)關(guān)閉文件
文件操作合法
文件操作合法 C程序打開失敗執(zhí)行C其它語句文件的使用流程
一般來講,以f開頭的函數(shù)均為文件處理函數(shù)。文件處理函數(shù)可以分為如下幾類:1)文件打開與關(guān)閉函數(shù);2)文件讀寫函數(shù);3)文件定位函數(shù);4)文件狀態(tài)跟蹤函數(shù)。8.1.4文件的操作流程8.2常用文件操作的標(biāo)準(zhǔn)函數(shù)標(biāo)準(zhǔn)C定義了文件庫函數(shù)的原型在<stdio.h>頭文件中。本節(jié)介紹文件的打開、讀寫及關(guān)閉函數(shù)。8.2.1文件的打開與關(guān)閉文件在進(jìn)行讀寫操作之前要先打開,使用完畢要關(guān)閉。所謂打開文件,實(shí)際上是建立文件的各種有關(guān)信息,并使文件指針指向該文件,以便進(jìn)行其它操作。關(guān)閉文件則斷開指針與文件之間的聯(lián)系,也就禁止再對該文件進(jìn)行操作。1.打開文件
在C語言中,除了3個(gè)標(biāo)準(zhǔn)文件外的所有文件在讀寫前都必須顯式的打開。文件的打開操作是通過fopen()函數(shù)來實(shí)現(xiàn)的,此函數(shù)的聲明在“stdio.h”中,函數(shù)原型如下:FILE*fopen(constchar*filename,constchar*mode);函數(shù)返回值——FILE類型指針。如果運(yùn)行成功,fopen返回文件的地址,否則返NULL。2.關(guān)閉文件
在C語言中,文件的關(guān)閉是通過fclose()函數(shù)來實(shí)現(xiàn)。此函數(shù)的聲明在“stdio.h”中,函數(shù)原型如下:intfclose(FILE*fp);函數(shù)返回值——int類型,如果為0,則表示文件關(guān)閉成功,否則表示失敗。fclose()函數(shù)的作用是關(guān)閉已經(jīng)打開的文件,要求操作系統(tǒng)將文件句柄fp所代表的文件系統(tǒng)進(jìn)行關(guān)閉?!纠?.1】打開名為“aa.txt”的文件,并向文件輸出字符串“hello”,然后關(guān)閉文件,同時(shí)在屏幕上輸出fc1ose的返回值。
8.2.2文本文件的讀寫文件打開之后,就可以進(jìn)行讀寫操作。文件的讀寫操作通過一組庫函數(shù)實(shí)現(xiàn),分為讀函數(shù)和寫函數(shù)。常用的讀寫函數(shù)分為如下幾類:1.字符的讀寫2.數(shù)值的讀寫3.格式化讀寫4.塊的讀寫5.字符串的讀寫1.字符的讀寫fputc()函數(shù)的作用是從當(dāng)前文件位置開始向文件輸出一個(gè)字符函數(shù)形式參數(shù)說明如下:intc——準(zhǔn)備輸出的字符。FILE*stream——文件地址,為FILE*類型變量。函數(shù)返回值——int類型。如果返回值為-1(EOF),則表示字符輸出失敗,否則返回值為c,即與輸出的字符相等。fgetc()函數(shù)的作用是從當(dāng)前文件位置讀取一個(gè)字符函數(shù)形式參數(shù)說明如下:FILE*stream——用讀寫模式和只讀模式打開的文件地址,為FILE*類型變量。函數(shù)返回值——int類型。如果返回值為-1,表示已經(jīng)讀到文件末尾,否則返回讀到的字符?!纠?.2】從鍵盤讀取一行字符,并輸出到“test.txt”文件中,再把該文件內(nèi)容讀出顯示在屏幕上。
1.字符的讀寫2.字符串的讀寫fgets()函數(shù)的形式參數(shù)如下:char*s——有效內(nèi)存地址,以便可以存儲(chǔ)從文件讀取的字符串。intn——讀取字符串的長度,確定從文件中讀取多少個(gè)字符。實(shí)質(zhì)上,此函數(shù)從文件中讀取n-1個(gè)字符到當(dāng)前的字符串中,然后自動(dòng)添加字符串結(jié)束符‘\0’。但是如果此文件中一行長度小于n,則到此行的換行符為止,并將此換行符讀取到字符串中。FILE*stream——文件地址fputs()函數(shù)的形式參數(shù)如下:constchar*s——有效的字符串,此字符串中不包括‘\n’。intn——字符串長度。實(shí)質(zhì)上,在向文件輸出信息時(shí),并不輸出‘\0’。FILE*stream——文件地址。函數(shù)返回值——整型數(shù)據(jù),如果函數(shù)運(yùn)行成功,則返回0;否則返回EOF。【例8.3】從test.txt文件中讀入一個(gè)含10個(gè)字符的字符串。【例8.4】在例8.2中建立的文件test.txt中追加一個(gè)字符串。3.塊的讀寫文件輸入輸出函數(shù)中還提供了塊的輸入輸出函數(shù),即將內(nèi)存中的一段信息作為一個(gè)整體進(jìn)行輸入輸出操作,其在“stdio.h”中的函數(shù)原型如下:size_tfread(void*ptr,size_tsize,size_tn,FILE*stream);size_tfwrite(constvoid*ptr,size_tsize,size_tn,FILE*stream);其中size_t在“stdio.h”中的定義如下typedefunsignedsize_t;【例8.5】從鍵盤輸入兩個(gè)學(xué)生數(shù)據(jù),寫入一個(gè)文件中,再讀出這兩個(gè)學(xué)生的數(shù)據(jù)顯示在屏幕上。fread()函數(shù)從fp指向的二進(jìn)制文件中,讀入count個(gè)大小為size個(gè)字節(jié)的數(shù)據(jù)塊到buf所指向的內(nèi)存中。如果執(zhí)行成功,則返回實(shí)際讀取的數(shù)據(jù)塊的個(gè)數(shù)。例如,從已經(jīng)打開的文件指針fp所指向的文件中讀入10個(gè)長整數(shù)到數(shù)組longa[20]中,這10個(gè)數(shù)依次存儲(chǔ)到a[9]開始的10個(gè)元素位置。3.塊的讀寫fwrite()函數(shù)從buf所指向的內(nèi)存中,讀入count個(gè)大小為size個(gè)字節(jié)的數(shù)據(jù)塊寫入到fp指向的文件中。如果執(zhí)行成功,則返回實(shí)際寫入的數(shù)據(jù)塊的個(gè)數(shù)。例如,將長整數(shù)數(shù)組a[20]的前10個(gè)元素寫入文件f中。if(fwrite(a,sizeof(long),10,f)!=10)printf(”文件寫出現(xiàn)錯(cuò)誤!\n”);3.塊的讀寫4.格式化讀寫1.fprintf()函數(shù)函數(shù)的意義是:將省略號表示的位置列出的表達(dá)式的值計(jì)算出來后,按mode中指定的格式輸?shù)接衒p指向的文件中。2.fscanf()函數(shù)函數(shù)的意義:從fp指向的文件中,按mode中指定的格式逐個(gè)讀取文本數(shù)據(jù)轉(zhuǎn)換成指定的數(shù)據(jù)類型,附給對應(yīng)指針指向的存儲(chǔ)單元中?!纠?.6】用fscanf和fprintf函數(shù)完成例8.5的問題。8.2.3文件的隨機(jī)訪問與定位文件可以理解為一個(gè)完整的數(shù)據(jù)流,因此可以將“數(shù)據(jù)流”分為文件頭、文件尾和文件主體三個(gè)部分。在C語言中通過FILE類型指針描述文件流的位置,因此FILE類型指針又稱為文件指針。在缺省情況下,文件的讀取是按順序進(jìn)行的。在完成一段信息的讀寫之后,文件指針移動(dòng)到其后的位置上準(zhǔn)備讀取下一次讀寫。在特殊情況下,需要對文件進(jìn)行隨機(jī)的讀寫,即讀取當(dāng)前位置的信息后,并不讀取緊接其后的信息,而是根據(jù)需要讀取特定位置處的信息。為了滿足文件的隨機(jī)讀寫操作,C語言中提供了文件指針定位函數(shù)。1.文件定位函數(shù)fseek()函數(shù)原型:intfseek(FILE*stream,longoffs
溫馨提示
- 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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 疫情防護(hù)2025年度企業(yè)員工培訓(xùn)與心理咨詢合同3篇
- 二零二五年度城市綠化養(yǎng)護(hù)勞務(wù)分包合同書4篇
- 二零二五年度城市住宅出售協(xié)議書(含裝修及家具配置)4篇
- 二零二五年鍋爐維修工程承包與環(huán)保驗(yàn)收協(xié)議3篇
- 2024手繪藝術(shù)作品拍賣合同協(xié)議3篇
- 安徽省二零二五年度住房租賃市場租賃糾紛處理合同
- 2025年護(hù)林員勞動(dòng)合同書(含森林資源保護(hù)培訓(xùn))3篇
- 2025版土地經(jīng)營權(quán)租賃與農(nóng)業(yè)產(chǎn)業(yè)扶貧合同3篇
- 二零二五年度高端房產(chǎn)交易意向金協(xié)議4篇
- 二零二五年度體育場館安保人員派遣管理協(xié)議3篇
- 消防產(chǎn)品目錄(2025年修訂本)
- 地方性分異規(guī)律下的植被演替課件高三地理二輪專題復(fù)習(xí)
- 光伏項(xiàng)目風(fēng)險(xiǎn)控制與安全方案
- 9.2提高防護(hù)能力教學(xué)設(shè)計(jì) 2024-2025學(xué)年統(tǒng)編版道德與法治七年級上冊
- 催收培訓(xùn)制度
- ISO 22003-1:2022《食品安全-第 1 部分:食品安全管理體系 審核與認(rèn)證機(jī)構(gòu)要求》中文版(機(jī)翻)
- 2024年廣東省高考地理真題(解析版)
- 2024高考物理廣東卷押題模擬含解析
- 人教版五年級上冊數(shù)學(xué)簡便計(jì)算大全600題及答案
- GB/T 15945-1995電能質(zhì)量電力系統(tǒng)頻率允許偏差
- GB 32311-2015水電解制氫系統(tǒng)能效限定值及能效等級
評論
0/150
提交評論