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

下載本文檔

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

文檔簡介

本章目錄10.1文件概述10.2文件的打開與關(guān)閉10.3文件的讀寫10.4文件的定位10.5錯(cuò)誤處理10.1文件概述為了方便大量數(shù)據(jù)的輸入輸出和長期存儲(chǔ),有必要在C語言的程序設(shè)計(jì)中引入文件的知識(shí)。“文件”是指記錄在外部介質(zhì)上的數(shù)據(jù)的集合,是計(jì)算機(jī)中數(shù)據(jù)在存儲(chǔ)介質(zhì)上的存在形式。文件通常分為兩大類:程序文件和數(shù)據(jù)文件。程序文件就是通常所說的可執(zhí)行文件,是計(jì)算機(jī)指令和少量數(shù)據(jù)的集合。數(shù)據(jù)文件只包含待程序文件處理的數(shù)據(jù),通常用來存儲(chǔ)大量數(shù)據(jù),例如:VCD文件、MP3文件、數(shù)據(jù)庫文件。C語言中的程序通過對文件的讀、寫等操作來實(shí)現(xiàn)對外部存儲(chǔ)介質(zhì)(例如磁盤)上數(shù)據(jù)的物理操作。通過C語言提供的文件操作函數(shù),可以簡單、高效、安全地訪問外部數(shù)據(jù)。1.文件類型 文件按其存儲(chǔ)數(shù)據(jù)的格式分為兩大類型:文本文件和二進(jìn)制文件。兩種文件格式主要有如下幾點(diǎn)區(qū)別:1)文本文件由可顯示字符組成,如字母、數(shù)字、符號(hào);而二進(jìn)制文件只是若干長度的0、1序列。2)文本文件以字符(8位)為單位寫入和讀??;二進(jìn)制文件則以數(shù)據(jù)塊為單位進(jìn)行讀寫。3)文本文件用于存儲(chǔ)文字信息,說明文件、C語言源程序文件都是文本文件;二進(jìn)制文件用于存儲(chǔ)非文本數(shù)據(jù),如二進(jìn)制執(zhí)行代碼、圖像、聲音等。10.1文件概述4)文本文件可以直接在屏幕上顯示文件內(nèi)容;二進(jìn)制文件雖然可以顯示,但顯示的內(nèi)容無意義2.文件類型指針 在C語言中引入了文件指針的概念,所有對文件的操作都通過文件指針完成。文件指針類似于C語言中的普通指針,但文件指針不是指向一段內(nèi)存空間,而是指向一個(gè)文件信息結(jié)構(gòu)體,該結(jié)構(gòu)體描述一個(gè)文件的相關(guān)信息,其定義在stdio.h頭文件中。用戶無需了解有關(guān)此結(jié)構(gòu)體的細(xì)節(jié),只需要知道如何使用文件指針即可。聲明一個(gè)文件指針使用以下語句:FILE*文件指針名1)要使用文件指針進(jìn)行文件相關(guān)操作必須在程序中包含stdio.h頭文件。2)“FILE”全是大寫字符,若改成小寫字母是錯(cuò)誤的。3)聲明一個(gè)文件指針后,就可以使用各種函數(shù)打開、關(guān)閉文件以及進(jìn)行讀寫操作。C語言中,對文件的基本操作可以說就是文件的打開和關(guān)閉、文件的讀寫等操作。10.2文件的打開與關(guān)閉在實(shí)際應(yīng)用當(dāng)中,經(jīng)常要對文件進(jìn)行處理,C程序?qū)ξ募奶幚磉^程一般如下:文件的打開。建立一個(gè)新的文件或?yàn)榇嫒∧骋粋€(gè)文件的數(shù)據(jù)而打開文件對文件進(jìn)行讀、寫或其他操作關(guān)閉文件。文件使用完后,要關(guān)閉文件,保存文件的改寫。1.文件的打開(fopen函數(shù))在C語言中文件的打開庫函數(shù)來實(shí)現(xiàn),其格式如下:FILE*fp;/*聲明一個(gè)文件指針*/fp=fopen(文件名,打開方式);文件名:是要求打開文件的文件名(包括擴(kuò)展名),是一個(gè)字符串,以雙引號(hào)括起。如果省略文件路徑,則在當(dāng)前目錄下打開文件。打開放式:有只讀、只寫、追加、讀寫幾種,使用不同的標(biāo)識(shí)符區(qū)分。標(biāo)識(shí)符見表9.110.2文件的打開與關(guān)閉打開方式標(biāo)識(shí)符含義“r”以只讀方式打開一個(gè)文本文件?!皐”以只寫方式打開一個(gè)文本文件?!癮”以追加方式打開一個(gè)文本文件。“r+”以讀寫方式打開一個(gè)文本文件?!皐+”以讀寫方式建立一個(gè)新的文本文件。“a+”以讀寫方式建立一個(gè)文本文件。“rb”以只讀方式打開一個(gè)二進(jìn)制文件?!皐b”以只寫方式打開一個(gè)二進(jìn)制文件。“ab”以追加方式打開一個(gè)二進(jìn)制文件。“rb+”以讀寫方式打開一個(gè)二進(jìn)制文件。“wb+”以讀寫方式建立一個(gè)新的二進(jìn)制文件?!癮b+”以讀寫方式打開一個(gè)二進(jìn)制文件。表9.110.2文件的打開與關(guān)閉例如:

fp=fopen(“abc.txt”,”r”)/*以只讀方式打開abc.txt文件*/ fp=fopen(“abc.c”,”r+”)/*以讀寫方式打開abc.c文件*/fopen()函數(shù)的返回值是一個(gè)文件信息結(jié)構(gòu)體的地址,該文件信息結(jié)構(gòu)體是描述目標(biāo)文件的相關(guān)信息。調(diào)用fopen()函數(shù)前必須聲明一個(gè)文件指針,并使用文件指針接受fopen()函數(shù)的返回值。文件指針被賦值后,程序中就通過這個(gè)文件指針對目標(biāo)文件進(jìn)行操作。若不使用文件指針接受fopen()函數(shù)的返回值,則無法對已打開的文件進(jìn)行訪問,調(diào)用fopen()函數(shù)也是無意義的。如果不能實(shí)現(xiàn)“打開”的任務(wù),fopen函數(shù)將會(huì)帶回一個(gè)出錯(cuò)信息。出錯(cuò)的原因可能是用“r”方式打開一個(gè)并不存在的文件;磁盤出故障;磁盤已滿無法建立新文件等。此時(shí)fopen函數(shù)將帶回一個(gè)空指針值NULL(NULL在stdio.h文件中已被定義為0)。常用下面的方法打開一個(gè)文件:if((fp=fopen(“file”,”r”))==NULL){printf(“cannotopenthisfile\n”);exit(0);}10.2文件的打開與關(guān)閉即先檢查打開的操作有否出錯(cuò),如果有錯(cuò)就在終端上輸出“cannotopenthisfile”。Exit函數(shù)的作用是關(guān)閉所有文件,終止正在調(diào)用的過程。待用戶檢查出錯(cuò),修改后在運(yùn)行。2.文件的關(guān)閉(fclose函數(shù))使用完一個(gè)文件之后應(yīng)該盡快關(guān)閉,以免數(shù)據(jù)丟失。關(guān)閉一個(gè)文件使用fclose()函數(shù)實(shí)現(xiàn),其格式如下:Fclose(文件指針)文件指針:指明要關(guān)閉哪個(gè)文件,作為參數(shù)的文件指針必須是由打開文件函數(shù)fopen()得到的。例如:#include<stdio.h>main(){FILE*fp;…if(fp=fopen(“abc.txt,”“r”))==0)/*嘗試打開文件*/10.2文件的打開與關(guān)閉{文件打開錯(cuò)誤處理else{/*打開文件成功*/…

讀寫文件操作

…fclose(fp);}…}以上程序由打開文件函數(shù)fopen()和關(guān)閉文件函數(shù)fclose()共同構(gòu)成了包含文件操作的C語言程序框架。abc.txt是文件名。應(yīng)該養(yǎng)成在程序終止之前關(guān)閉所有文件的習(xí)慣,如果不關(guān)閉文件將會(huì)丟失數(shù)據(jù),因?yàn)?,在向文件寫?shù)據(jù)時(shí),是先將數(shù)據(jù)輸?shù)骄彌_區(qū),待緩沖區(qū)充滿后才正式輸出給文件。如果當(dāng)數(shù)據(jù)未充滿緩沖區(qū)而程序結(jié)束運(yùn)行,就會(huì)將緩沖區(qū)中的數(shù)據(jù)丟失。用fclose函數(shù)關(guān)閉文件,可以避免這個(gè)問題,它先把緩沖區(qū)中的數(shù)據(jù)輸出到磁盤文件,然后才在釋放文件指針變量。10.3文件的讀寫對文件來說,讀寫操作是非常重要的,常用的讀寫函數(shù)如下:10.3.1fgetc()函數(shù)和fputc()函數(shù)對文件的操作時(shí)一次讀寫一個(gè)字符。1.fgetc()函數(shù)從指定的文件讀取一個(gè)字符,該文件必須是以讀或讀寫方式打開的。其格式如下:charc;c=fgetc(文件指針)文件指針:指向一個(gè)已打開的文件,ch為字符變量。fgetc函數(shù)的返回值是一個(gè)字符,賦給ch。如果在執(zhí)行fgetc函數(shù)讀字符時(shí)遇到文件結(jié)束符,函數(shù)返回一個(gè)文件結(jié)束標(biāo)志EOF(-1)。如果想從一個(gè)磁盤文件順序讀入字符并在屏幕上顯示出來,可以如下操作:ch=fgetc(文件指針);while(ch!=EOF){putchar(ch);ch=fgetc(文件指針);}10.3文件的讀寫注意:EOF不是可輸出字符,因此不能在屏幕上顯示。由于字符的ASCII碼不可能出現(xiàn)-1,因此EOF定義為-1是合適的。當(dāng)讀入的字符值等于-1(即EOF)時(shí),表示讀入的已不是正常的字符而是文件結(jié)束符。但以上只使用于讀文本文件的情況。現(xiàn)在ANSIC已允許用緩沖文件系統(tǒng)處理二進(jìn)制文件,而讀入某一個(gè)字節(jié)中的二進(jìn)制數(shù)據(jù)的值有可能是-1,而這又恰好是EOF的值。這就出現(xiàn)了需要讀入有用數(shù)據(jù)而卻被處理為“文件結(jié)束”的情況。為了解決這個(gè)問題,ANSIC提供一個(gè)feof函數(shù)來判斷文件是否真的結(jié)束。feof(fp)用來測試fp所指向的文件當(dāng)前狀態(tài)是否“文件結(jié)束”。如果是文件結(jié)束,函數(shù)feof(fp)的值為1(真),否則為0(假)。如果讀入一個(gè)二進(jìn)制文件中的數(shù)據(jù),可以用

while(!feof(fp)){c=fgetc(fp);…}2.fputc()函數(shù)把一個(gè)字符寫到磁盤文件上去,其格式如下:fputc(字符,文件指針);例如向文件指針fp所指的文件寫入字符‘c’的語句是:fputc(‘c’,fp);10.3文件的讀寫如果函數(shù)調(diào)用成功,則返回寫入的字符;如果失敗,則返回EOF(-1)。下面的程序?qū)崿F(xiàn)了復(fù)制文件的功能,源文件為c:\tc\abc.txt,目標(biāo)文件為c:\tc\xyz.txt。例10.1程序舉例#include<stdio.h>main(){FILE*fp1,*fp2;/*聲明兩個(gè)文件指針,分別用于源文件和目標(biāo)文件*/charc;if((fp1=fopen("abc.txt","r"))==NULL||(fp2=fopen("xyz.txt","w+"))==NULL)/*同時(shí)打開源文件和目標(biāo)文件,分別為只讀方式和新建文件方式*/printf("FileOpenError\n");else{while((c=fgetc(fp1))!=EOF)/*循環(huán)從源文件讀入字符,遇到文件結(jié)束符停止*/10.3文件的讀寫fputc(c,fp2);fclose(fp1);fclose(fp2);}system("cls");printf("abc.txt:\n");system("typeabc.txt");/*調(diào)用DOS命令輸出源文件內(nèi)容*/printf("\n\nxyz.txt:\n");system("typexyz.txt");/*調(diào)用DOS命令輸出目標(biāo)文件內(nèi)容*/}運(yùn)行結(jié)果如下:10.3文件的讀寫10.3.2fgets()函數(shù)和fputs()函數(shù) 以字符為單位的fgetc()函數(shù)和fputc()函數(shù)一次只能讀出或?qū)懭胍粋€(gè)字符到文件中,顯然處理大量數(shù)據(jù)時(shí)效率不高,以字符串為單位的fgets()函數(shù)和fputs()函數(shù)可以一次從文件輸入或向文件輸出一個(gè)字符串。1.fgets()函數(shù)fgets()是從文件而不是從標(biāo)準(zhǔn)輸入設(shè)備取得字符串。其格式如下:fgets(字符串指針,字符個(gè)數(shù),文件指針); 其中第一個(gè)參數(shù)“字符串指針”,即一個(gè)字符組名或指向字符的指針,用于存放讀出的字符串;第二個(gè)參數(shù)指明讀出多少個(gè)字符,是一個(gè)整型數(shù);第三個(gè)參數(shù)即目標(biāo)文件的文件指針。

fgets()在遇到換行符或文件結(jié)束符時(shí),即使已讀取得字符數(shù)小于參數(shù)中指定的數(shù)量也會(huì)自動(dòng)停止。如程序設(shè)計(jì)者已經(jīng)知道abc.txt文件不大于100個(gè)字節(jié),調(diào)用fgets()函數(shù)的第二個(gè)參數(shù)為100,使得整個(gè)文件被一次讀取。若abc.txt文件大于100字節(jié),則后面的內(nèi)容沒有被讀取。如果fgets()讀取到文件結(jié)束符,將會(huì)返回一個(gè)NULL值。可以據(jù)此判斷是否到達(dá)文件尾部,使用循環(huán)語句讀出整個(gè)文件。若目標(biāo)文件的結(jié)構(gòu)不清晰,一般使用fgetc()函數(shù)逐個(gè)字符讀取,逐個(gè)處理。在預(yù)先知道目標(biāo)文件結(jié)構(gòu)的情況下,使用fgets()函數(shù)能提高效率。10.3文件的讀寫2.fputs()函數(shù)fputs()函數(shù)用于向文件寫入字符串,它的使用格式如下:

fputs(字符串,文件指針); 第一個(gè)參數(shù)可以是一個(gè)字符串,也可以是一個(gè)字符數(shù)組或指向字符的指針;第二個(gè)參數(shù)是文件指針。例如:charc[100];char*s;fputs(“Hello”,fp);/*將字符串“Hello”寫到fp所指文件中*/fputs(*s,fp);/*將字符指針s所指的字符串寫到fp所指文件中*/fputs(c,fp);/*將字符數(shù)組c的內(nèi)容寫到fp所指文件中*/下面的程序利用fgets()函數(shù)和fputs()函數(shù)實(shí)現(xiàn)了復(fù)制文件的功能,源文件為abc.txt,目標(biāo)文件為xyz.txt。10.3文件的讀寫例10.2程序舉例#include<stdio.h>main(){FILE*fp1,*fp2;chars[100];if((fp1=fopen("abc.txt","r"))==NULL||(fp2=fopen("xyz.txt","w+"))==NULL)printf("FileOpenError\n");else{fgets(s,100,fp1);fputs(s,fp2);fclose(fp1);fclose(fp2);}10.3文件的讀寫system("cls");printf("abc.txt:\n");system("typeabc.txt");printf("\n\nxyz.txt:\n");system("typexyz.txt");}運(yùn)行結(jié)果:10.3文件的讀寫10.3.3fwrite()函數(shù)和fread()函數(shù)這類操作,以二進(jìn)制方式讀寫文件。在某些情況下不合適使用文本方式讀寫文件,在這種情況下,選擇使用二進(jìn)制方式讀寫文件。如果采用二進(jìn)制讀寫方式,那么數(shù)據(jù)在文件中的占用空間的大小與在內(nèi)存中完全一致。二進(jìn)制讀寫方式克服了文本讀寫方式的缺點(diǎn),能夠獲得更高的時(shí)間、空間效率和安全性。在內(nèi)存中連續(xù)的若干長度的,表示特定一個(gè)或多個(gè)數(shù)據(jù)的二進(jìn)制數(shù)據(jù)稱為二進(jìn)制數(shù)據(jù)塊。1.fwrite()函數(shù)使用fwrite()函數(shù)可以將內(nèi)存中的二進(jìn)制數(shù)據(jù)以數(shù)據(jù)塊為單位寫入指定的二進(jìn)制文件中,其格式如下:

fwrite(內(nèi)存起始地址,數(shù)據(jù)塊長度,重復(fù)次數(shù),目標(biāo)文件指針);例:FILE*fp;10.3文件的讀寫inta=12345;…/*以二進(jìn)制方式打開文件*/fwrite(&a,2,1,fp);上面的語句調(diào)用fwrite()函數(shù)將整型變量a的值輸出到文件指針fp所指的文件中。第一個(gè)參數(shù)表達(dá)式“&a”的值即變量a的起始地址;第二個(gè)參數(shù)是整型變量a的長度,應(yīng)為2個(gè)字節(jié)(16位);第三個(gè)參數(shù)1表示只進(jìn)行一次輸出操作;最后一個(gè)參數(shù)指出輸出目標(biāo)文件是當(dāng)前文件指針fp所指的文件。如果不確切知道待輸出數(shù)據(jù)的長度,可以使用sizeof()函數(shù)取得。如上例的fwrite()函數(shù)可以寫為:fwrite(&a,sizeof(a),1,fp);/*使用sizeof()函數(shù)取得輸出變量a的長度*/如果fwrite調(diào)用成功,則函數(shù)返回值為count的值,即輸入或輸出數(shù)據(jù)項(xiàng)的完整個(gè)數(shù)。使用fwrite()函數(shù)也可以整個(gè)數(shù)組或結(jié)構(gòu)體以二進(jìn)制方式寫入文件中。10.3文件的讀寫例:FILE*fp;floatx[10];…/*以二進(jìn)制形式打開文件*/fwrite(x,sizeof(float)*10,1,fp);/*將浮點(diǎn)型數(shù)值x的所有元素都寫入fp所指的二進(jìn)制文件中*/

2.fread()函數(shù) 與寫二進(jìn)制數(shù)據(jù)塊函數(shù)fwrite()對應(yīng),fread()用于讀取已經(jīng)寫入到二進(jìn)制文件的二進(jìn)制數(shù)據(jù)塊。fread()函數(shù)使用格式:

fread(內(nèi)存起始地址,數(shù)據(jù)塊長度,重復(fù)次數(shù),目標(biāo)文件指針);

fread()函數(shù)中三個(gè)參數(shù)的意義與fwrite()函數(shù)中對參數(shù)的意義相似,只是兩者傳輸數(shù)據(jù)的方向不同。fread()函數(shù)返回一個(gè)整型數(shù)值。如果所有數(shù)據(jù)都成功讀取,fread()函數(shù)返回第三個(gè)參數(shù)的值;如果讀取數(shù)據(jù)出錯(cuò)或遇到文件結(jié)束符,fread()函數(shù)返回成功讀取的數(shù)據(jù)塊的數(shù)量,即成功讀取了多少個(gè)指定長度(由第二個(gè)參數(shù)決定)的數(shù)據(jù)塊。10.3文件的讀寫例:FILE*fp;inta;…/*打開文件*/fread(&a,sizeof(int),1,fp);上面的語句調(diào)用了fread()函數(shù),將文件指針fp所指的二進(jìn)制文件中的sizeof(int)個(gè)字節(jié)的數(shù)據(jù)存入整型變量a的內(nèi)存空間中。使用fread()函數(shù)需要注意一點(diǎn):務(wù)必保證不損害內(nèi)存中未知區(qū)域的數(shù)據(jù)。下面是一個(gè)錯(cuò)誤的例子:FILE*fp;charname[10];…/*以二進(jìn)制形式打開文件*/fread(name,1,11,fp);/*錯(cuò)誤!*/

這條語句從文件指針fp所指的二進(jìn)制文件中讀取11個(gè)字符的數(shù)據(jù),已經(jīng)超出了name數(shù)組的范圍。10.3文件的讀寫例10.3現(xiàn)有一個(gè)關(guān)于學(xué)生信息的磁盤文件file1,請把該文件存入另一個(gè)文件file2中。 實(shí)際上,這個(gè)題目的要求是編寫一個(gè)程序,實(shí)現(xiàn)文件復(fù)制功能。 其程序如下:#include<stdio.h>structstu/*宏定義*/{intid;/*結(jié)構(gòu)體成員*/charname[20];intage;};main()/*主函數(shù)*/{structstustu1;/*定義結(jié)構(gòu)體變量*/intnFILE*in,*out;10.3文件的讀寫if((in=fopen("file1.txt","r"))==NULL||(out=fopen("file2.txt","w+"))==NULL)printf("FileOpenError\n");/*打開文件*/else{while(fread(&stu1,sizeof(structstu),1,in)==1)/*讀文件*/fwrite(&stu1,sizeof(structstu),1,out);/*寫文件*/fclose(in);/*關(guān)閉文件*/fclose(out);/*關(guān)閉文件*/}}該函數(shù)每次以二進(jìn)制形式從file1文件中讀取一個(gè)結(jié)構(gòu)類型(stu)的數(shù)據(jù),然后把該數(shù)據(jù)寫到file2文件中。當(dāng)fread()函數(shù)的返回值不等于1時(shí),就意味著讀出錯(cuò)或讀結(jié)束,此時(shí)結(jié)束循環(huán)。關(guān)于代碼的詳細(xì)情況,請參見代碼中的注釋10.3文件的讀寫10.3.4fscanf()函數(shù)和fprintf()函數(shù) 下面介紹具有更強(qiáng)大的功能的文件格式化輸入、輸出函數(shù):fscanf函數(shù)和fprintf()函數(shù)。1)fscanf()函數(shù)

fscanf()函數(shù)的功能與使用方法與scanf()函數(shù)基本相同,只是fscanf()函數(shù)獲取數(shù)據(jù)的來源文件,而不是鍵盤。fscanf()函數(shù)使用格式:fscanf(文件指針,輸入內(nèi)容,輸入項(xiàng));fscanf()函數(shù)的第一個(gè)參數(shù)是一個(gè)文件指針,指出從哪個(gè)文件輸入格式化數(shù)據(jù)。除此外,fscanf()函數(shù)與scanf()函數(shù)在使用上沒有差別。例:FILE*fp;intd;charc;10.3文件的讀寫…/*打開文件*/fscanf(fp,“%d%c”,&d,&c);/*從文件輸入數(shù)據(jù)*/上面的fscanf()函數(shù)從文件指針fp所指文件輸入一個(gè)整型數(shù)和一個(gè)字符,并保存到整型變量d和字符變量c中。兩項(xiàng)數(shù)據(jù)以空格分隔。2)fprintf()函數(shù)fprintf()函數(shù)與常用的printf()函數(shù)很類似。fprintf函數(shù)使用格式:fprintf(文件指針,輸出內(nèi)容,輸出項(xiàng));fprintf()函數(shù)的第一個(gè)參數(shù)指明輸出的目標(biāo)文件,其他參數(shù)的格式與printf()函數(shù)一致。例:FILE*fp;…/*打開文件*/intd;fprintf(fp,”%d\n”,d);/*輸出數(shù)據(jù)到文件*/10.3文件的讀寫上面的語句使用fprintf()函數(shù)向文件指針fp所指的文件輸出一個(gè)整型數(shù)據(jù)和一個(gè)回車符。使用fscanf()函數(shù)和fprintf()函數(shù)時(shí),由于在輸入時(shí)要將ASCII碼轉(zhuǎn)換為二進(jìn)制形式,在輸出時(shí)又要將二進(jìn)制形式轉(zhuǎn)換成字符,花時(shí)間較多。用fscanf()函數(shù)和fprintf()函數(shù)對磁盤文件讀寫,使用方便,但在內(nèi)存與磁盤頻繁交換數(shù)據(jù)的情況下,最好不用fprintf和fscanf函數(shù),而用fread和fwrite函數(shù)。10.4文件的定位在對文件進(jìn)行操作時(shí),不一定始終都是從文件的開始位置進(jìn)行操作的,因此,對文件的定位非常重要。本節(jié)將介紹一系列文件定位函數(shù)。1.fseek()函數(shù)fseek()函數(shù)可以實(shí)現(xiàn)改變文件的位置指針。fseek()函數(shù)的格式如下:fseek(文件指針,偏移量,基點(diǎn));文件指針無需詳細(xì)說明;偏移量表示以基點(diǎn)為起始位置,向前或向后移動(dòng)的距離,以字節(jié)為單位,數(shù)據(jù)類型為長整形;基點(diǎn)有三個(gè)取值,意義:0——文件開頭,1——文件當(dāng)前位置,2——文件末尾。例如:FILE*FP;…/*打開文件*/fseek(fp,5L,0);/*將位置指針移到距文件開頭5個(gè)字節(jié)處*/fseek(fp,-10L,0);/*使位置指針相對文件當(dāng)前位置向前移動(dòng)10個(gè)字節(jié)處*/fseek(fp,-40L,0);/*使位置指針移到距文件尾部40個(gè)字節(jié)處*/第二個(gè)參數(shù)是長整型數(shù)據(jù),因而要在數(shù)值后加“L”表示這是一個(gè)長整型數(shù)。如果成功移動(dòng),fseek()將返回0值,否則返回非0值。10.4文件的定位2.rewind()函數(shù)調(diào)用函數(shù)能使位置指針重新返回文件的開頭。此函數(shù)沒有返回值。rewind()函數(shù)的格式如下:rewind(文件指針);例如:FILE*fp;…/*打開文件*

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論