《C語言程序設(shè)計》課件第08章_第1頁
《C語言程序設(shè)計》課件第08章_第2頁
《C語言程序設(shè)計》課件第08章_第3頁
《C語言程序設(shè)計》課件第08章_第4頁
《C語言程序設(shè)計》課件第08章_第5頁
已閱讀5頁,還剩39頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第8章文件語言程序設(shè)計第八章文件C8.1問題的提出

8.2文件的概念8.3文件操作的常用函數(shù)8.4本章小結(jié)8.5問與答內(nèi)容簡介8.1問題的提出語言程序設(shè)計第八章文件C在調(diào)試大程序中要進行大量數(shù)據(jù)的輸入輸出和處理時,需花費不少時間用在輸入數(shù)據(jù)或查看結(jié)果上,這導(dǎo)致調(diào)試效率降低。能不能把這此數(shù)據(jù)放到某個地方,在需要時直接使用呢?本章將講述在C語言中使用文件來存儲這些數(shù)據(jù)的方法與步驟。8.2文件的概念語言程序設(shè)計第八章文件C文件是指存儲在外部介質(zhì)上一組相關(guān)數(shù)據(jù)的集合。例如,程序文件是程序代碼的集合;數(shù)據(jù)文件是數(shù)據(jù)的集合。操作系統(tǒng)以文件為單位對數(shù)據(jù)進行管理,每個文件有一個名稱,即文件名。文件名是文件的標(biāo)識,操作系統(tǒng)通過文件名訪問文件。例如,通過文件名查找、打開文件,然后讀取或?qū)懭霐?shù)據(jù)。1、磁盤文件、設(shè)備文件(1)磁盤文件:文件一般保存在磁介質(zhì)(如軟盤、硬盤)上,所以稱為磁盤文件。(2)設(shè)備文件:操作系統(tǒng)還經(jīng)常將與主機相連接的I/O設(shè)備(如鍵盤、輸入文件、顯示器、打印機、輸出文件)也看作文件,即設(shè)備文件。很多磁盤文件的概念、操作對設(shè)備文件也同樣有意義,有效。8.2文件的概念語言程序設(shè)計第八章文件C2、ASCII文件、二進制文件根據(jù)文件的組織形式,文件可以分為ASCII文件和二進制文件。(1)ASCII文件(文本文件):每個字節(jié)存放一個ASCII碼,代表一個字符。ASCII文件可以閱讀,可以打印,但是它與內(nèi)存數(shù)據(jù)交換時需要轉(zhuǎn)換。(2)二進制文件:將內(nèi)存中的數(shù)據(jù)按照其在內(nèi)存中的存儲形式原樣輸出并保存在文件中。二進制文件占用空間少,內(nèi)存數(shù)據(jù)和磁盤數(shù)據(jù)交換時無須轉(zhuǎn)換,但是二進制文件不可閱讀、打印。文本文件/二進制文件不是用后綴來確定的,而是以內(nèi)容來確定的,但是文件后綴往往隱含其類別,如*.txt代表文本文件,*.bmp、*.exe代表二進制文件。8.2文件的概念語言程序設(shè)計第八章文件C3、緩沖文件系統(tǒng)、非緩沖文件系統(tǒng)(1)緩沖文件系統(tǒng):系統(tǒng)自動地在內(nèi)存中為每個正在使用的文件開辟一個緩沖區(qū)。在從磁盤讀數(shù)據(jù)時,一次從磁盤文件將一些數(shù)據(jù)輸入到內(nèi)存緩沖區(qū)(充滿緩沖區(qū)),然后從緩沖區(qū)逐個將數(shù)據(jù)送給接受變量;向磁盤文件輸出數(shù)據(jù)時,先將數(shù)據(jù)送到內(nèi)存緩沖區(qū),裝滿緩沖區(qū)后才一起輸出到磁盤,減少對磁盤的實際訪問(讀/寫)次數(shù)。ANSIC只采用緩沖文件系統(tǒng)。(2)非緩沖文件系統(tǒng):不由系統(tǒng)自動設(shè)置緩沖區(qū),而由用戶根據(jù)需要設(shè)置。C語言中,沒有輸入輸出語句,對文件的讀寫者是用庫函數(shù)實現(xiàn)的。8.3文件操作的常用函數(shù)語言程序設(shè)計第八章文件C在C語言程序中,無論是一般磁盤文件還是設(shè)備文件,都可以通過文件結(jié)構(gòu)類型的數(shù)據(jù)集合進行輸入輸出操作。文件結(jié)構(gòu)是由系統(tǒng)定義的,取名為FILE。FILE類型是一種結(jié)構(gòu)體類型,在stdio.h中定義其用于存放文件的當(dāng)前的有關(guān)信息。程序使用一個文件,系統(tǒng)就為此文件開辟一個FILE類型變量。程序使用幾個文件,系統(tǒng)就開辟幾個FILE類型變量,存放各個文件的相關(guān)信息。

8.3文件操作的常用函數(shù)語言程序設(shè)計第八章文件C在stdio.h文件中有以下的文件類型聲明:typedef

struct{shortlevel;/*fill/emptylevelofbuffer*/unsignedflags;/*文件狀態(tài)標(biāo)志*/charfd;/*文件描述符*/unsignedcharhold;/*Ungetccharifnobuffer*/shortbsize;/*緩沖區(qū)大小*/unsignedchar*buffer;/*數(shù)據(jù)傳輸緩沖區(qū)*/unsignedchar*curp;/*當(dāng)前激活指針*/unsignedistemp;/*臨時文件指示器*/shorttoken;/*用于合法性校驗*/}FILE;8.3文件操作的常用函數(shù)語言程序設(shè)計第八章文件C對FILE結(jié)構(gòu)體的訪問通常是通過FILE類型指針變量(簡稱文件指針)完成的,文件指針變量指向文件類型變量,簡單地說就是文件指針指向文件。事實上,只需要使用文件指針完成文件的操作,根本不必關(guān)心文件類型變量的內(nèi)容。在打開一個文件后,系統(tǒng)開辟一個文件變量并返回此文件的文件指針,將此文件指針保存在一個文件指針變量中,以后所有對文件的操作都通過此文件指針變量完成,直到關(guān)閉文件,才釋放文件指針指向的文件類型變量。例如:定義一個指向文件的指針變量fp。fp=fopen(“data.txt”,…);打開文件時,系統(tǒng)開辟一個文件變量,并返回文件指針,將此指針賦值(保存)給文件指針變量fp。fclose(fp);關(guān)閉文件,釋放文件指針fp指向的文件變量。8.3文件操作的常用函數(shù)語言程序設(shè)計第八章文件C對文件的操作的步驟:先打開,后讀寫,最后關(guān)閉。(1)文件的打開(fopen函數(shù))文件打開后才能進行操作,文件打開通過調(diào)用fopen函數(shù)實現(xiàn)。調(diào)用fopen的格式是:FILE*fp;fp=fopen(文件名,打開方式或使用方式);注意:一定將函數(shù)返回的文件指針賦值給“文件指針變量”。例如:FILE*fp;fp=fopen(“d:\\data.txt”,”r”);8.3.1文件的打開與關(guān)閉8.3文件操作的常用函數(shù)語言程序設(shè)計第八章文件C說明:①上面的語句表示打開d盤根目錄下文件名為data.txt的文件,打開方式”r”表示只讀。fopen函數(shù)返回指向d:\\data.txt的文件指針,然后賦值給fp,fp指向此文件,即fp與此文件關(guān)聯(lián)。②關(guān)于文件名要注意:文件包含文件名.擴展名;路徑要用“\\”表示。③打開方式如下表所示,不同類的打開方式可以組合。8.3.1文件的打開與關(guān)閉8.3文件操作的常用函數(shù)語言程序設(shè)計第八章文件C文件使用方式含義“r”(只讀)為輸入打開一個文本文件“w”(只寫)為輸出打開一個文本文件“a”(追加)向文本文件尾添加數(shù)據(jù)“rb”(只讀)為輸入打開一個二進制文件“wb”(只寫)為輸出打開一個二進制文件“ab”(追加)向二進制文件尾添加數(shù)據(jù)“r+”(讀寫)為讀寫打開一個文本文件“w+”(讀寫)為讀寫建立一個新的文本文件“a+”(讀寫)為讀寫打開一個文本文件“rb+”(讀寫)為讀寫打開一個二進制文件“wb+”(讀寫)為讀寫建立一個新的二進制文件“ab+”(讀寫)為讀寫打開一個二進制文件8.3.1文件的打開與關(guān)閉8.3文件操作的常用函數(shù)語言程序設(shè)計第八章文件C(2)文件打開方式(使用方式)的說明①文件打開一定要檢查fopen函數(shù)的返回值,因為有可能文件不能正常打開。不能正常打開時fopen函數(shù)返回NULL??梢杂孟旅娴男问綑z查:if((fp=fopen(…))==NULL){printf(“openfileerror\n”);exit(1);}②”r”方式:只能從文件讀入數(shù)據(jù)而不能向文件寫入數(shù)據(jù)。該方式要求欲打開的文件已經(jīng)存在。③”w”方式:只能向文件寫入數(shù)據(jù)而不能從文件讀入數(shù)據(jù)。如果文件不存在,則創(chuàng)建文件;如果文件存在,則原文件被刪除,然后重新創(chuàng)建文件(相當(dāng)于覆蓋原文件)。④”a”方式:在文件末尾添加數(shù)據(jù),而不刪除原文件。該方式要求欲打開的文件已經(jīng)存在。8.3.1文件的打開與關(guān)閉8.3文件操作的常用函數(shù)語言程序設(shè)計第八章文件C(2)文件打開方式(使用方式)的說明⑤”+”(“r+”、”w+”、”a+”):均為可讀、可寫。但是”r+”、”a+”要求文件已經(jīng)存在,”w+”無此要求;”r+”打開文件時文件指針指向文件開頭,”a+”打開文件時文件指針指向文件末尾。⑥”b”:以二進制方式打開文件。⑦讀文本文件時,將“回車/換行”轉(zhuǎn)換為“換行”;寫文本文件時,將“換行”轉(zhuǎn)換為“回車/換行”。⑧程序開始運行時,系統(tǒng)自動打開三個標(biāo)準(zhǔn)文件:標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出、標(biāo)準(zhǔn)出錯輸出。一般這三個文件對應(yīng)于終端(鍵盤、顯示器)。這三個文件不需要手工打開就可以使用。標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出、標(biāo)準(zhǔn)出錯輸出對應(yīng)的文件指針是stdin、stdout、stderr。8.3.1文件的打開與關(guān)閉8.3文件操作的常用函數(shù)語言程序設(shè)計第八章文件C(3)文件的關(guān)閉(fclose函數(shù))文件使用完畢后必須關(guān)閉,以避免數(shù)據(jù)丟失。格式:fclose(文件指針);例如:fclose(fp);fclose()函數(shù)也會帶回一個返回值,如果順利執(zhí)行了關(guān)閉操作,則返回為0;否則會返回EOF(-1)。8.3.1文件的打開與關(guān)閉8.3文件操作的常用函數(shù)語言程序設(shè)計第八章文件C對于文本文件,可以通過判斷讀入的字符是不是EOF來決定是否到了文件尾。對于二進制文件,再使用EOF就不行了。因為,EOF在二進制文件中也是一個合法的數(shù)據(jù)。這時,可以使用函數(shù)feof()判斷。進行文件訪問時,出現(xiàn)錯誤是難免的。應(yīng)用時經(jīng)常需要對文件的關(guān)鍵操作進行判斷和檢測,以便進行后續(xù)處理。C語言函數(shù)庫中的ferror()提供了返回流操作中檢測錯誤的功能。(1)feof(FILE*fp)該函數(shù)的功能是在進行文件讀操作時,如果遇到文件尾,此函數(shù)返回邏輯真(非0);否則返回邏輯假(0)。此函數(shù)適用于文本文件和二進制文件。8.3.2文件的錯誤檢測與處理8.3文件操作的常用函數(shù)語言程序設(shè)計第八章文件C(2)ferror(FILE*fp)該函數(shù)的功能是檢測函數(shù)調(diào)用是否有錯誤。當(dāng)調(diào)用輸入輸出函數(shù)后,可再調(diào)用此函數(shù)。若函數(shù)返回值為0,表明前面的輸入輸出操作沒有錯誤;若返回值為非0值,則表明有錯誤,應(yīng)及時檢查。(3)clearerr(FILE*fp)該函數(shù)的功能是使文件錯誤標(biāo)志和文件結(jié)束標(biāo)志置為0。若文件檢測有錯誤(即函數(shù)返回值為非0值),可調(diào)用本函數(shù),使ferror(fp)的值變?yōu)?。8.3.2文件的錯誤檢測與處理8.3文件操作的常用函數(shù)語言程序設(shè)計第八章文件C文件打開后才可以對文件進行操作。也就是說,文件必須經(jīng)歷打開——操作——關(guān)閉的過程。C語言對文件的操作都是通過調(diào)用標(biāo)準(zhǔn)I/O庫函數(shù)實現(xiàn)的。文件操作實際是指對文件的讀寫。文件的讀操作就是從文件中讀出數(shù)據(jù),即將文件中的數(shù)據(jù)輸入到計算機;文件的寫操作是向文件中寫入數(shù)據(jù),即向文件輸出數(shù)據(jù)。實際上對文件的處理過程就是對文件的輸入輸出過程。本節(jié)討論對磁盤文件的輸入輸出函數(shù),這類文件及其相應(yīng)函數(shù)在實際應(yīng)用和文件處理中占據(jù)重要的地位。

8.3.3文件的順序讀寫及其范例8.3文件操作的常用函數(shù)語言程序設(shè)計第八章文件CC語言提供的緩沖式文件處理函數(shù)可分為:字符輸入輸出函數(shù):fgetc和fputc字符串輸入輸出函數(shù):fgets和fputs格式化輸入輸出函數(shù):fscanf和fprintf數(shù)據(jù)塊輸入輸出函數(shù):fread和fwrite8.3.3文件的順序讀寫及其范例8.3文件操作的常用函數(shù)語言程序設(shè)計第八章文件C(1)字符輸入/輸出函數(shù)①字符輸入函數(shù)fgetc()fgetc函數(shù)的調(diào)用形式為:ch=fgetc(fp);其中fp為文件型指針變量,ch為字符變量。函數(shù)功能:從指定的文件中讀取一個字符。即從fp所指向的文件(該文件必須是以讀或讀寫方式打開的)中讀取一個字符并返回,讀取的字符賦給變量ch。若讀取字符時文件已經(jīng)結(jié)束或出錯,fgetc函數(shù)返回文件結(jié)束標(biāo)記EOF,此時EOF的值為-1。例如,要從磁盤文件中順序讀入字符并在屏幕上顯示,可通過調(diào)用fgetc函數(shù)實現(xiàn):while((c=fgetc(fp))!=EOF)putchar(c);8.3.3文件的順序讀寫及其范例8.3文件操作的常用函數(shù)語言程序設(shè)計第八章文件C【例8-1】在屏幕上顯示文本文件內(nèi)容。#include"stdio.h"main(){FILE*fp;charfilename[20],ch;

printf("Enterfilename:");

scanf("%s",filename);/*輸入文件名,包括路徑和擴展名*/

if((fp=fopen(filename,"r"))==NULL)/*打開文件*/{printf("fileopenerror.\n");/*出錯處理*/exit(0);}

while((ch=fgetc(fp))!=EOF)/*從文件中讀字符*/

putchar(ch);/*顯示從文件讀入的字符*/

fclose(fp);/*關(guān)閉文件*/}EX8_1.c演示8.3.3文件的順序讀寫及其范例8.3文件操作的常用函數(shù)語言程序設(shè)計第八章文件C②字符輸出函數(shù)fputc()fputc函數(shù)的調(diào)用形式為:fputc(ch,fp);其中,ch是要輸出的字符(可為字符常量或字符變量),fp為文件型指針變量。函數(shù)功能:將一個字符輸出到指定文件中。即將字符變量ch中的字符輸出到fp所指向的文件。若輸出操作成功,該函數(shù)返回輸出的字符;否則,返回EOF。8.3.3文件的順序讀寫及其范例8.3文件操作的常用函數(shù)語言程序設(shè)計第八章文件C【例8-2】從鍵盤輸入一字符串,并逐個將字符串的每個字符傳送到磁盤文件file中,當(dāng)輸入的字符為“#”時停止輸入。#include"stdio.h"main(){FILE*fp;/*指向磁盤文件file的指針*/charch;/*暫存讀入字符的字符變量*/charfilename[20];/*存放磁盤文件名的字符數(shù)組*/

printf("Enterfilename:");

scanf("%s",filename);/*從鍵盤輸入磁盤文件名,包括路徑*/8.3.3文件的順序讀寫及其范例8.3文件操作的常用函數(shù)語言程序設(shè)計第八章文件C

if((fp=fopen(filename,"w"))==NULL)/*以只寫方式打開文本文件,并判斷是否能正常打開*/{printf(“Cannotopenfile.\n”);/*不能正常打開磁盤文件的處理*/exit(0);/*調(diào)用函數(shù)exit終止程序運行*/}printf("Enterastring:");

ch=getchar();/*從鍵盤上輸入一個字符*/

while(ch!='#')/*判斷輸入字符是否為#*/{fputc(ch,fp);/*將字符寫入到磁盤文件*/

ch=getchar();/*從鍵盤上輸入下一個字符*/}

fclose(fp);/*操作結(jié)束后關(guān)閉磁盤文件*/}EX8_2.c演示8.3.3文件的順序讀寫及其范例8.3文件操作的常用函數(shù)語言程序設(shè)計第八章文件C

(2)字符串輸入輸出函數(shù)①字符串輸入函數(shù)fgets()函數(shù)的調(diào)用形式:fgets(str,n,fp);函數(shù)功能:從fp所指文件中讀入n-1個字符放入以str為起始地址的空間內(nèi)。如果在未讀完n-1個字符時,已經(jīng)讀到一個換行符或一個EOF(文件結(jié)束標(biāo)志),則結(jié)束本次讀操作,讀入的字符串中最后包含讀到的換行符。因此,確切地說,調(diào)用fgets()函數(shù)時,最多只能讀入n-1個字符。讀入結(jié)束后,系統(tǒng)將自動在最后加’\0’,并以str作為函數(shù)值返回。②字符串輸出函數(shù)fputs()函數(shù)的調(diào)用形式:fputs(str,fp);函數(shù)功能:將str指向的字符串寫入fp文件指針?biāo)傅奈募?。操作成功時,函數(shù)返回0值,失敗則返回非零值。8.3.3文件的順序讀寫及其范例8.3文件操作的常用函數(shù)語言程序設(shè)計第八章文件C

【例8-3】從一個文本文件t1.txt中讀出字符串,再寫入另一個文件t2.txt。#include"stdio.h"#include"string.h"main(){FILE*fp1,*fp2;charstr[128];if((fp1=fopen("D:\clessons\example\t1.txt","r"))==NULL)/*以只讀方式打開t1.txt*/{

printf("Cannotopenfile.\n");exit(0);}8.3.3文件的順序讀寫及其范例EX8_3.c演示8.3文件操作的常用函數(shù)語言程序設(shè)計第八章文件C

if((fp2=fopen("D:\clessons\example\t2.txt","w"))==NULL)/*以只寫方式打開t1.txt*/{printf("Cannotopenfile.\n");exit(0);}while((strlen(fgets(str,128,fp1)))>0)/*從文件中讀到的字符串長度大于0*/{fputs(str,fp2);/*從t1.txt讀字符串并寫入t2.txt*/

printf("%s",str);/*在屏幕上顯示讀到的字符串*/}fclose(fp1);fclose(fp2);}8.3.3文件的順序讀寫及其范例8.3文件操作的常用函數(shù)語言程序設(shè)計第八章文件C(3)格式化的讀寫前面的章節(jié)中,介紹了利用scanf()和printf()函數(shù)從鍵盤格式化輸入及在顯示器上進行格式化輸出。對文件的格式化讀寫就是在上述函數(shù)的前面加一個字母f成為fscanf()和fprintf()。其函數(shù)調(diào)用方式為:fscanf(文件指針,格式控制串,輸入表項);fprintf(文件指針,格式控制串,輸出表項);其中,當(dāng)文件指針為stdin、stdout時,以上兩函數(shù)等同于scanf()函數(shù)和printf()函數(shù)。函數(shù)功能:按格式對文件進行I/O操作,成功時返回I/O的個數(shù);出錯或文件尾時,返回EOF。例如:fscanf(fp,”%d%s”,&i,s);fprintf(fp,”%d%c”,j,ch);8.3.3文件的順序讀寫及其范例8.3文件操作的常用函數(shù)語言程序設(shè)計第八章文件C【例8-4】將一些格式化的數(shù)據(jù)寫入文本文件,再從該文件中以格式化方法讀出顯示到屏幕上,其格式化數(shù)據(jù)是兩個學(xué)生記錄,包括姓名、學(xué)號、兩科成績。#include"stdio.h"main(){FILE*fp;

inti;

struct

stu/*定義結(jié)構(gòu)體類型*/{charname[10];charnum[6];floatscore[2];}student;/*定義結(jié)構(gòu)體變量*/8.3.3文件的順序讀寫及其范例EX8_4.c演示8.3文件操作的常用函數(shù)語言程序設(shè)計第八章文件Cif((fp=fopen(“D:\\t1.txt","w"))==NULL)/*以只寫方式打開文本文件*/{printf("Cannotopenfile.");exit(0);}

printf("Inputdata:\n");

for(i=0;i<2;i++){scanf("%s%s%f%f",,student.num,&student.score[0],&student.score[1]);/*從鍵盤輸入數(shù)據(jù)*/

fprintf(fp,"%s%s%7.2f%7.2f\n",,student.num,student.score[0],student.score[1]);/*寫入文件*/}

fclose(fp);/*關(guān)閉文件*8.3.3文件的順序讀寫及其范例8.3文件操作的常用函數(shù)語言程序設(shè)計第八章文件C

if((fp=fopen(“D:\\t1.txt","r"))==NULL)/*以只讀方式重新打開文本文件*/{printf("Cannotopenfile.");exit(0);}

printf("Outputfromfile:\n");

while(fscanf(fp,"%s%s%f%f\n",,student.num,&student.score[0],&student.score[1])!=EOF)/*從文件讀入*/{printf("%s%s%7.2f%7.2f\n",,student.num,student.score[0],student.score[1]);/*顯示到屏幕*/}

fclose(fp);/*關(guān)閉文件*/}8.3.3文件的順序讀寫及其范例8.3文件操作的常用函數(shù)語言程序設(shè)計第八章文件C(4)數(shù)據(jù)塊讀寫前面介紹的幾種讀寫文件的方法,對其復(fù)雜的數(shù)據(jù)類型無法以整體形式向文件寫入或從文件讀出。C語言提供成塊的讀寫方式來操作文件,使其數(shù)組或結(jié)構(gòu)體等類型可以進行一次性讀寫。成塊讀寫文件函數(shù)的調(diào)用形式為:fread(buffer,size,count,fp);fwrite(buffer,size,count,fp);其中,buffer是數(shù)據(jù)塊的指針,對fread()來說,它是一個內(nèi)存塊的首地址,輸入的數(shù)據(jù)存入這個內(nèi)存塊中;對于fwrite()來說,它是準(zhǔn)備輸出的數(shù)據(jù)塊的起始地址。size表示每個數(shù)據(jù)塊的字節(jié)數(shù),count用來指定每讀、寫一次,輸入或輸出數(shù)據(jù)塊的個數(shù)(每個數(shù)據(jù)塊具有size字節(jié))。fp為文件指針。關(guān)于成塊的文件讀寫,在創(chuàng)建文件時只能以二進制文件格式創(chuàng)建。8.3.3文件的順序讀寫及其范例8.3文件操作的常用函數(shù)語言程序設(shè)計第八章文件C【例8-5】向磁盤寫入格式化數(shù)據(jù),再從該文件讀出顯示到屏幕。#include"stdio.h"#include"stdlib.h"main(){FILE*fp1;

inti;

struct

stu/*定義結(jié)構(gòu)體*/{charname[10];charnum[9];floatscore[2];}student;。8.3.3文件的順序讀寫及其范例EX8_5.c演示8.3文件操作的常用函數(shù)語言程序設(shè)計第八章文件C

if((fp1=fopen(“d:\\t1.txt","wb"))==NULL)/*以只寫方式打開二進制文件*/{printf("Cannotopenfile.\n");exit(0);}

printf("inputdata:\n");

for(i=0;i<2;i++){scanf("%s%s%f%f",,student.num,&student.score[0],&student.score[1]);/*輸入一條記錄*/fwrite(&student,sizeof(student),1,fp1);/*成塊寫入文件*/}fclose(fp1);8.3.3文件的順序讀寫及其范例8.3文件操作的常用函數(shù)語言程序設(shè)計第八章文件C

if((fp1=fopen(“d:\\t1.txt","rb"))==NULL)/*重新以二進制只寫打開文件*/{printf("Cannotopenfile.\n");exit(0);}

printf("Outputfromfile:\n");

for(i=0;i<2;i++){fread(&student,sizeof(student),1,fp1);/*從文件成塊讀*/

printf("%s%s%7.2f%7.2f\n",,student.num,student.score[0],student.score[1]);/*顯示到屏幕*/}fclose(fp1);}8.3.3文件的順序讀寫及其范例8.3文件操作的常用函數(shù)語言程序設(shè)計第八章文件C

8.3.4文件的隨機讀寫及其范例前面介紹的對文件的操作都是順序讀寫,即從文件的第一個數(shù)據(jù)開始,依次進行讀寫。由指向文件的指針自動移位。但在實際對文件的應(yīng)用中,還往往需要對文件中某個特定的數(shù)據(jù)進行處理,這就要求對文件具有隨機讀寫的功能,也就是強制將文件的指針指向用戶所希望的指定位置。C語言對文件的定位提供了三個函數(shù)fseek()、rewind()和ftell()。8.3文件操作的常用函數(shù)語言程序設(shè)計第八章文件C(1)改變文件位置指針函數(shù)fseek()fseek(fp,Offset,position);其中:fp為文件型指針;position為起始點,指出以文件的什么位置為基準(zhǔn)進行移動。position的值用整常數(shù)表示。ANSIC允許它有下列三個值之一:0——文件的開頭;1——文件的當(dāng)前位置;2——文件的末尾。Offset為位移量,指從起始點position到要確定的新位置的字節(jié)數(shù)。也就是以起點為基準(zhǔn),向前移動的字節(jié)數(shù)。ANSIC要求該參數(shù)為長整型量。函數(shù)功能:將文件fp的讀寫位置指針移到離開起始位置(position)的Offset字節(jié)處位置;如果函數(shù)讀寫指針移動失敗,返回值為-1。

8.3.4文件的隨機讀寫及其范例8.3文件操作的常用函數(shù)語言程序設(shè)計第八章文件C下面是幾個fseek函數(shù)調(diào)用的實例:fseek(fp,50L,0);將位置指針從文件頭開始向文件結(jié)束方向移動50個字節(jié);fseek(fp,100L,1);將位置指針從當(dāng)前位置向前(文件結(jié)束方向)移動100個字節(jié)fseek(fp,-20L,2);將位置指針從文件末尾文件頭方向移動20個字節(jié)說明:fseek()函數(shù)一般用于二進制文件。在文本文件中,由于要進行轉(zhuǎn)換,故計算的位置往往會計算不準(zhǔn)。

8.3.4文件的隨機讀寫及其范例8.3文件操作的常用函數(shù)語言程序設(shè)計第八章文件C【例8-6】實現(xiàn)對一個文本文件內(nèi)容的反向顯示。程序源代碼如下:#include"stdio.h"main(){charc;FILE*fp;

clrscr();

if((fp=fopen(“d:\\t1.txt","r"))==NULL)/*以只讀方式打開文本文件*/{

printf("Cannotopenfile.\n");exit(1);}

8.3.4文件的隨機讀寫及其范例EX8_6.c演示8.3文件操作的常用函數(shù)語言程序設(shè)計第八章文件C

fseek(fp,0L,2);/*定位文件尾。是定位文件的最后一個字符之后的位置*/while((fseek(fp,-1L,1))!=-1)/*相對當(dāng)前位置退后一個字節(jié)*/{

溫馨提示

  • 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)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論