版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第12章文件12.1概述12.2文件指針12.3打開、關(guān)閉和檢測文件12.4文件的輸入輸出12.5文件的定位
12.1概述
1.C語言文件分類
文件(file)是指存放在外部介質(zhì)上的一組相關(guān)數(shù)據(jù)的集合。外部介質(zhì)可以是磁盤、U盤、光盤等,文件的內(nèi)容可以是程序或數(shù)據(jù)等。本章討論數(shù)據(jù)文件(即文件的內(nèi)容是數(shù)據(jù))的讀寫。根據(jù)數(shù)據(jù)的存放形式,在C語言中將文件分為文本(text)文件和二進制文件。文本文件又稱為ASCII文件,它采用ASCII代碼存儲方式,即1個字符占1個字節(jié),存放其對應(yīng)的ASCII代碼值。比如整數(shù)432,在內(nèi)存中占2個字節(jié),當把它以文本文件形式存放時,系統(tǒng)將它轉(zhuǎn)換成由?'4','3','2'?三個字符對應(yīng)的ASCII碼存放在文件中,在文件中占3個字節(jié),其存放形式如圖12.1所示。圖12.1文本文件存放整數(shù)示意圖圖12.2二進制文件存放整數(shù)示意圖
2.文件處理方法
C語言把文件看做是一個字符序列(文本文件)或字節(jié)序列(二進制文件),即C語言文件是由一個一個的字符或字節(jié)順序組成的,沒有任何定界符的數(shù)據(jù)流,所以C語言文件也稱為流式文件。圖12.3系統(tǒng)工作示意圖
12.2文件指針
在C語言文件系統(tǒng)中,文件指針的概念非常重要。所謂文件指針,實際上是一個指向結(jié)構(gòu)體類型數(shù)據(jù)的指針變量。每個被使用的文件都在內(nèi)存中開辟了一個區(qū),用來存放文件的有關(guān)信息,這些信息包括文件緩沖區(qū)的地址、在緩沖區(qū)中當前存取字符的位置、對文件的操作模式(是讀或?qū)?、文件的名稱、文件的狀態(tài)(是否遇到文件結(jié)束標志)等。以上信息保存在一個結(jié)構(gòu)體變量中,而某個文件的文件指針就指向與該文件相關(guān)的結(jié)構(gòu)體變量。
該結(jié)構(gòu)體類型是由系統(tǒng)在stdio.h中定義的,類型名為FILE。文件指針的定義形式如下:
FILE*文件指針變量名;
例如:
FILE*fp;
12.3打開、關(guān)閉和檢測文件
12.3.1打開文件
在C語言中,用戶可以使用fopen函數(shù)打開文件。fopen函數(shù)的一般調(diào)用形式如下:
FILE*fp;
fp=fopen(文件名,使用文件方式);
功能:按使用文件方式打開一個指定的文件。函數(shù)返回一個指向FILE類型的指針,
例如:
FILE*fp;
fp=fopen("c:\file.dat","r");
fopen函數(shù)的第一個參數(shù)可以是字符串常量,也可以是字符指針、字符數(shù)組名,例如:
FILE*fp;
charfname[10]=“c:\file1.dat”;
fp=fopen(fname,“r”);
fopen函數(shù)的第二個參數(shù)(使用文件方式)各種含義如表12.1所示。12.3.2關(guān)閉文件
在C語言中,用戶可以使用fclose函數(shù)關(guān)閉文件。fclose函數(shù)的一般調(diào)用形式如下:
fclose(文件指針);
功能:關(guān)閉文件指針所指向的文件,使文件指針與文件脫離關(guān)系。例如:
fclose(fp);12.3.3檢測文件
1.檢測文件是否結(jié)束(feof函數(shù))
在一個打開的文件中存在一個位置指針,用于指向當前讀/寫的數(shù)據(jù)位置,每讀/寫一個數(shù)據(jù)項該指針就指向下一個數(shù)據(jù)位置。當位置指針指向文件的末尾時,若再次讀/寫就會發(fā)生錯誤。為了防止讀/寫錯誤的發(fā)生,C語言系統(tǒng)提供了feof函數(shù)來檢測文件位置指針是否到了文件末尾。feof函數(shù)的一般調(diào)用形式如下:
feof(文件指針);
2.檢測錯誤(ferror函數(shù))
ferror函數(shù)的一般調(diào)用形式如下:
ferror(文件指針);
3.清除錯誤標志和文件結(jié)束標志(clearerr函數(shù))
clearerr函數(shù)的一般調(diào)用形式如下:
clearerr(文件指針);
12.4文件的輸入輸出
12.4.1字符的輸入輸出
最簡單的文件I/O函數(shù)是fgetc和fputc函數(shù),它們一次處理一個字符。
1.fputc函數(shù)
可以使用fputc函數(shù)向文件輸出字符。fputc函數(shù)的一般調(diào)用形式為:
fputc(ch,fp)
【例12-1】從鍵盤上輸入一個以“$”結(jié)束的字符串,并將它原樣存到名為INPUT的文件中。圖12.4例12-1運行結(jié)果
2.fgetc函數(shù)
在C語言中,可以使用fgetc函數(shù)從文件中輸入字符。fgetc函數(shù)的一般調(diào)用形式如下:
fgetc(fp);
功能:從指定的文件中讀取一個字符,該文件必須是以只讀方式或讀/寫方式打開的。其中,fp為文件指針,指向fopen函數(shù)打開的文件,例如:
ch=fgetc(fp);
fgetc函數(shù)從文件中讀取一個字符,賦給字符變量ch。如果在執(zhí)行時出錯,則返回EOF(EOF為系統(tǒng)定義的符號常量,其值為-1)。如果想從一個文本文件中順序讀取一些字符并在屏幕上顯示出來,可以采用以下程序段代碼。
【例12-2】編寫程序讀入例12-1生成的文本文件INPUT,并將內(nèi)容原樣輸出到屏幕上。圖12.5例12-2運行結(jié)果12.4.2字符串的輸入輸出
在C語言中,可以使用fgets函數(shù)從文件中讀取字符串。fgets函數(shù)的一般調(diào)用形式如下:
fgets(str,n,fp)
用戶可以使用fputs函數(shù)向文件輸出字符串。fputs函數(shù)的一般調(diào)用形式如下:
fputs(str,fp);
【例12-3】從鍵盤輸入多個字符串,存入文件中。圖12.6例12-3運行結(jié)果12.4.3格式化輸入輸出
在C語言中,fprintf函數(shù)和fscanf函數(shù)用來讀/寫文本文件。fprintf、fscanf函數(shù)與printf、scanf函數(shù)相似,都是格式化輸入/輸出函數(shù),只是輸入/輸出的對象不同。fprintf函數(shù)和fscanf函數(shù)的輸入/輸出對象不是顯示器和鍵盤,而是磁盤文件。其一般調(diào)用形式如下:
fprintf(文件指針,“格式控制字符串”,輸出項列表);
fscanf(文件指針,"格式控制字符串",輸入項地址列表);
【例12-4】編寫程序從鍵盤上輸入3個學(xué)生的學(xué)號、姓名和成績,并將它們存放到磁盤文件stud.txt中。圖12.7例12-4運行結(jié)果
【例12-5】打開磁盤文件stud.txt,讀取其中存放的3個學(xué)生數(shù)據(jù)。圖12.8例12-5運行結(jié)果12.4.4讀寫二進制文件
在C語言中,fread函數(shù)和fwrite函數(shù)用于讀/寫二進制文件。它們的一般調(diào)用形式如下:
fread(buffer,size,count,fp);
fwrite(buffer,size,count,fp);
【例12-6】從鍵盤上輸入3個學(xué)生的學(xué)號、姓名和成績,并將它們存放到磁盤文件stud.list中(使用fwrite函數(shù))。圖12.9例12-6運行結(jié)果
【例12-7】從磁盤文件stud.list中讀取學(xué)生數(shù)據(jù)并顯示(使用fread函數(shù))。圖12.10例12-7運行結(jié)果
12.5文?件?的?定?位
12.5.1文件位置指針重定位
在實際開發(fā)中,用戶可以使用rewind函數(shù)來設(shè)置指針變化。rewind函數(shù)的一般調(diào)用形式如下:
rewind(文件指針);
功能:將文件的位置指針置于文件的開頭,此函數(shù)沒有返回值。例如:有一個磁盤文件,第一次將它的內(nèi)容顯示在屏幕上,第二次把它復(fù)制到另一個文件中。12.5.2文件隨機讀/寫
在C語言中,用戶可以使用fseek函數(shù)進行文件的隨機讀/寫。fseek函數(shù)的一般調(diào)用形式如下:
fseek(文件類型指針,位移量,起始點);
功能:移動文件的位置指針到指定的位置,隨機的讀/寫操作將從此位置開始,利用fseek函數(shù)可以實現(xiàn)文件的隨機讀/寫。其中,起始點為文件開始、當前位置或文件末尾。在程序中可使用ANSIC標準指定的標識符或用相應(yīng)的數(shù)字代表,如表12.2所示。例如:12.5.3獲得文件位置指針的當前位置
在C語言中,用戶可以通過ftell函數(shù)獲得文件位置指針的當前
溫馨提示
- 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)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度食品行業(yè)員工工資支付合同范本3篇
- 2024智慧城市公共安全監(jiān)控系統(tǒng)合同
- 2025年度智能廚房設(shè)備承包服務(wù)合同范本3篇
- 二零二五年餐廳合伙人聯(lián)合推廣宣傳合同3篇
- 二零二五版單位職工食堂員工健康飲食指導(dǎo)承包協(xié)議3篇
- 2024高端裝備制造業(yè)國際合作框架合同
- 二零二五年新材料企業(yè)股份代持與研發(fā)合作合同3篇
- 2025年度采礦權(quán)抵押融資法律服務(wù)協(xié)議書3篇
- 2025年度綠色食品配送中心員工勞務(wù)合同范本3篇
- 2024年長期戰(zhàn)略聯(lián)盟協(xié)議
- 2025年度土地經(jīng)營權(quán)流轉(zhuǎn)合同補充條款范本
- 南通市2025屆高三第一次調(diào)研測試(一模)地理試卷(含答案 )
- Python試題庫(附參考答案)
- 聚酯合成副反應(yīng)介紹
- DB37-T 1342-2021平原水庫工程設(shè)計規(guī)范
- 電除顫教學(xué)課件
- 廣東省藥品電子交易平臺結(jié)算門戶系統(tǒng)會員操作手冊
- DB32T 3960-2020 抗水性自修復(fù)穩(wěn)定土基層施工技術(shù)規(guī)范
- 大斷面隧道設(shè)計技術(shù)基本原理
- 41某31層框架結(jié)構(gòu)住宅預(yù)算書工程概算表
- 成都市國土資源局關(guān)于加強國有建設(shè)用地土地用途變更和
評論
0/150
提交評論