




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
本章內(nèi)容8.1引例8.2文件的打開與關(guān)閉8.3文件的順序讀寫8.4文件的定位與隨機讀寫8.5文件操作的出錯檢測第8章文件理解文件的基本概念正確區(qū)分文本文件和二進制文本掌握文件的打開和關(guān)閉操作掌握文件的讀寫和定位操作4123學習要求C文件概述所謂文本文件,是把內(nèi)存中的數(shù)據(jù)轉(zhuǎn)變成相應(yīng)的ASCII碼值形式,然后存放在磁盤上。因此,每個字節(jié)存放一個字符的ASCII碼值。所謂二進制文件,是把內(nèi)存中的數(shù)據(jù)按其在內(nèi)存中的存儲形式原樣存放到磁盤上去C文件概述0011001100110010001101110011011000110111文本文件1111111101111111shortint數(shù)據(jù)32767'3'
'2'
'7'
'6'
'7'
32767的各字符的ASCII碼存放形式0111111111111111二進制文件32767的二進制存放形式內(nèi)存存放形式C文件概述數(shù)據(jù)按文本形式存儲在磁盤上,占用的存儲空間多,存儲時要花費轉(zhuǎn)換時間。但以這種形式存儲,一個字節(jié)代表一個字符,便于對字符進行逐個處理,也便于輸出顯示數(shù)據(jù)按二進制形式存儲在磁盤上時,無須花費轉(zhuǎn)換時間,占用空間少。但字節(jié)不與字符對應(yīng),因此不能直接輸出顯示C文件概述緩沖文件系統(tǒng)輸出時,先將數(shù)據(jù)送到內(nèi)存緩沖區(qū),緩沖區(qū)裝滿后,才將整個緩沖區(qū)的內(nèi)容一次寫入磁盤輸入時,先把磁盤中的一塊數(shù)據(jù)讀入到內(nèi)存緩沖區(qū),然后再從緩沖區(qū)中把需要的數(shù)據(jù)挑出來,送到程序數(shù)據(jù)區(qū)中磁盤輸入輸出輸入文件緩沖區(qū)輸出文件緩沖區(qū)輸出輸入程序數(shù)據(jù)區(qū)內(nèi)存C文件概述在緩沖文件系統(tǒng)中,對每個正在使用的文件都自動分配一個FILE類型的結(jié)構(gòu)體變量,用于存放文件的有關(guān)信息,如文件號、文件狀態(tài)、緩沖區(qū)地址和大小等typedefstruct{intlevel;/*緩沖區(qū)“滿”或“空”的程度*/unsignedflags;/*文件狀態(tài)標志*/charfd;/*文件描述符*/unsignedcharhold;/*如無緩沖區(qū)不讀取字符*/intbsize;/*緩沖區(qū)大小*/unsignedchar*buffer;/*數(shù)據(jù)緩沖區(qū)位置*/unsignedchar*curp;/*文件定位指針*/unsignedistemp;/*臨時文件指示器*/shorttoken;/*用于有效性檢查*/}FILE;C文件概述C語言對于每一個要操作的文件,都必須定義一個指針變量,指向該文件結(jié)構(gòu)體變量,這個指針稱為文件指針FILE*指針變量標識符;例如:FILE*fp;fp是一個指向FILE類型結(jié)構(gòu)體的指針變量C文件操作常用函數(shù)fopen打開文件1fclose關(guān)閉文件2fgets讀字符串3fputs寫字符串4fgetc讀字符5fputc寫字符6feof指針是否到尾7fread讀數(shù)據(jù)塊8fwrite寫數(shù)據(jù)塊9fscanf格式讀數(shù)據(jù)10fprintf格式寫數(shù)據(jù)11fseek指針重定位12rewind指針移到頭13ftell返回指針位置14文件的打開與關(guān)閉文件打開函數(shù):fopen()FILE*fopen(char*filename,char*mode);FILE*fp=fopen("C:\CONFIG.SYS","rw");filename是文件名,包含路徑。如果不含路徑,表示打開當前目錄下的文件mode是打開方式,常用為"r"、"w"、"rw"和"a",分別表示只讀、只寫、讀寫和添加返回值為指向此文件的指針,留待以后使用。如果打開失敗,返回值為NULL文件的打開與關(guān)閉文件類型使用方式意義備注文本文件”r”只讀:打開一個文本文件,只允許讀數(shù)據(jù)舊文件”w”只寫:打開或建立一個文本文件,只允許寫數(shù)據(jù)新文件”a”追加:打開一個文本文件,并在文件末尾寫數(shù)據(jù)舊文件”r+”讀寫:打開一個文本文件,允許讀和寫舊文件”w+”讀寫:打開或建立一個文本文件,允許讀寫新文件”a+”讀寫:打開一個文本文件,允許讀,或在文件末追加數(shù)據(jù)舊文件二進制文件”rb”只讀:打開一個二進制文件,只允許讀數(shù)據(jù)舊文件”wb”只寫:打開或建立一個二進制文件,只允許寫數(shù)據(jù)新文件”ab”追加:打開一個二進制文件,并在文件末尾寫數(shù)據(jù)舊文件”rb+”讀寫:打開一個二進制文件,允許讀和寫舊文件”wb+”讀寫:打開或建立一個二進制文件,允許讀和寫新文件”ab+”讀寫:打開一個二進制文件,允許讀,或在文件末追加數(shù)據(jù)舊文件文件的打開與關(guān)閉一般地,使用fopen()函數(shù)打開一個文件時,要檢查文件打開的正確性,以便確定程序能否繼續(xù)執(zhí)行下去if(fp=fopen("filename","r"))==NULL){printf("Cannotopenfile\n");exit(0);}如果不做文件指針合法性檢查,一旦文件打開失敗,就會造成野指針操作,嚴重時會導致系統(tǒng)崩潰文件的打開與關(guān)閉文件關(guān)閉函數(shù)fclose()
intfclose(FILE*stream);FILE*fp;
fclose(fp);文件使用完后,為確保文件中的數(shù)據(jù)不丟失,就要使用文件關(guān)閉函數(shù)fclose()進行關(guān)閉,其功能是將使用完后的文件寫回到磁盤文件文件的讀寫對字符讀寫函數(shù):fgetc()、fputc()字符串讀寫函數(shù):fgets()、fputs()
數(shù)據(jù)塊讀寫函數(shù):fread()、fwrite()格式化讀寫函數(shù):fscanf()、fprintf()讀寫指針定位函數(shù):fseek()讀寫指針歸位函數(shù):rewind()讀寫指針位置函數(shù):ftell()文件的讀寫fputc()函數(shù)格式:fputc(ch,fp);功能:將一個字符ch寫入到文件中,同時將讀寫指針向前移動1個字節(jié)(即指向下一個字符)fgetc()函數(shù)格式:ch=fgetc(fp);功能:從指定文本文件中讀取一個字符,同時將讀寫指針向前移動1個字節(jié)(即指向下一個寫入位置)文件的讀寫例8.1:讀入文件test.txt并在屏幕上輸出#include<stdio.h>main(){FILE*fp;charch;if((fp=fopen("test.txt","r"))==NULL){printf("Cannotopenfile\n");exit(0);}elsefor(ch=fgetc(fp);ch!=EOF;ch=fgetc(fp))putchar(ch);fclose(fp);}文件的讀寫例8.2:輸入字符保存到test.txt,碰到”#”結(jié)束#include<stdio.h>#include<stdlib.h>voidmain(){FILE*fp;charch;if((fp=fopen("test.txt","w"))==NULL){printf("Cannotopenfile\n");exit(0);}ch=getchar();while(ch!='#'){fputc(ch,fp);putchar(ch);ch=getchar();}fclose(fp);}文件的讀寫fputs()函數(shù)格式:fputs(str,n,fp);功能:將一個字符串str寫入指定的文本文件fgets()函數(shù)格式:fgets(str,n,fp);功能:從指定文件讀一個字符串到字符數(shù)組str中其中的n是一個正整數(shù),表示字符串不超過n-1個字符。在最后一個字符后加上串結(jié)束標志'\0'文件的讀寫例8.3:從test.txt中讀入一個含20個字符的字符串#include<stdio.h>#include<stdlib.h>voidmain(){FILE*fp;charstr[21];if((fp=fopen("test.txt","r"))==NULL){printf("Cannotopenfile\n");exit(0);}fgets(str,21,fp);printf("\n%s\n",str);fclose(fp);}文件的讀寫例8.4:從鍵盤輸入字符,并輸出到test.txt#include<stdio.h>#include<stdlib.h>#include<string.h>voidmain(){FILE*fp;charstr[100];if((fp=fopen("test.txt","w"))==NULL){printf("Cannotopenfile\n");exit(0);}while(strlen(gets(str))>0){fputs(str,fp);fputs("\n",fp);}fclose(fp);}文件的讀寫fread()函數(shù)fread(buffer,size,count,fp);功能:從指針fp當前指向的二進制文件中連續(xù)讀出count×size個字節(jié)內(nèi)容,并存入首地址為buffer的內(nèi)存區(qū)域中fwrite()函數(shù)fwrite(buffer,size,count,fp);功能:從首地址為buffer的內(nèi)存區(qū)域中,連續(xù)取出count×size個字節(jié)內(nèi)容,并寫入指針fp當前指向的二進制文件中文件的讀寫例8.5:將100至200之間的素數(shù)存到文件text.txt中#include<stdio.h>#include<stdlib.h>#include<math.h>voidmain(){FILE*fp;intn,r,k;if((fp=fopen("test.txt","wb"))==NULL){printf("Cannotopenfile\n");exit(0);}for(n=101;n<200;n=n+2){r=sqrt(n);for(k=2;k<=r;k++)if(n%k==0)break;if(k>r)fwrite(&n,sizeof(int),1,fp);}fclose(fp);}文件的讀寫例8.6:將test.txt中的素數(shù)按每行10個數(shù)輸出#include<stdio.h>#include<stdlib.h>voidmain(){FILE*fp;intn=0,k;if((fp=fopen("test.txt","rb"))==NULL){printf("Cannotopenfile\n");exit(0);}fread(&k,sizeof(int),1,fp);while(!feof(fp)){if(n%10==0)printf("\n");printf("%6d",k);fread(&k,sizeof(int),1,fp);n++;}}文件的讀寫fprintf()函數(shù)fprintf(fp,format,arg1,arg2,…,argn);功能:將輸出項按指定的格式寫入指定的文本文件
fscanf()函數(shù)fscanf(fp,format,arg1,arg2,…,argn);功能:按規(guī)定的格式從指定的文本文件中讀數(shù)據(jù)文件讀寫指針定位fseek()格式:fseek(fp,offset,tag);功能:是將某個指定文件的讀寫位置指針從某個位置移動到另一個位置tag表示移動方式,該參數(shù)取值有3種情況:相對于文件頭部移動時,取值為0或SEEK_SET;相對于文件尾部移動時,取值為2或SEEK_END;相對于當前位置移動時,取值為1或SEEK
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 可行性研究報告合作
- 農(nóng)業(yè)項目可行性研究報告怎樣寫
- 太陽能光伏并網(wǎng)發(fā)電廠家
- 教育行業(yè)學生評估與反饋預案
- 汽車行業(yè)智能汽車研發(fā)與制造流程優(yōu)化方案
- 跨境電商系統(tǒng)建設(shè)
- 物流項目報告
- 交通卡口監(jiān)控系統(tǒng)維護方案
- 旅游酒店行業(yè)的智能化客房服務(wù)系統(tǒng)開發(fā)方案
- 三農(nóng)特色種植技術(shù)手冊
- GB/T 16422.2-2022塑料實驗室光源暴露試驗方法第2部分:氙弧燈
- 大客戶銷售培訓
- 生物化學與分子生物學實驗(終版)
- 細胞內(nèi)蛋白質(zhì)的分選和運輸細胞生物學-1
- 高血壓健康宣教-飲食課件
- 八年級-現(xiàn)在完成時復習(共26張)課件
- 電氣基礎(chǔ)知識培訓要點課件
- 基坑工程施工驗收記錄表
- GB∕T 37045-2018 信息技術(shù) 生物特征識別 指紋處理芯片技術(shù)要求
- 瀝青項目運營方案參考范文
- 商品混凝土項目園區(qū)審批申請報告(范文參考)
評論
0/150
提交評論