C語言從入門到精通教學課件作者第2版PPT第14章 文件.ppt

(36頁)

'C語言從入門到精通教學課件作者第2版PPT第14章 文件.ppt'
文件文件概述文件基本操作文件的讀寫文件的定位文件概述“文件”是指一組相關數據的有序集合。這個數據集有一個名稱,叫做文件名。通常情況下,使用計算機也就是在使用文件。在前面的程序設計中,我們介紹了輸入和輸出,即從標準輸入設備(鍵盤)輸入,由標準輸出設備(顯示器或打印機)輸出。不僅如此,我們也常把磁盤作為信息載體,用于保存中間結果或最終數據。在使用一些字處理工具時,會打開一個文件將磁盤的信息輸入到內存,通過關閉一個文件來實現將內存數據輸出到磁盤。這時的輸入和輸出是針對文件系統,因此文件系統也是輸入和輸出的對象。文件概述所有文件都通過流進行輸入、輸出操作。與文本流和二進制流對應,文件可以分為文本文件和二進制文件兩大類:?文本文件,也稱為ASCII文件。這種文件在保存時,每個字符對應一個字節,用于存放對應的ASCII碼。?二進制文件,不是保存ASCII碼,而是按二進制的編碼方式來保存文件內容。文件可以從不同的角度進行具體的分類:?從用戶的角度(或所依附的介質)看,文件可分為普通文件和設備文件兩種。? 普通文件是指駐留在磁盤或其他外部介質上的一個有序數據集。? 設備文件是指與主機相連的各種外部設備,如顯示器、打印機、鍵盤等。在操作系統中,把外部設備也看作一個文件來進行管理,把它們的輸入、輸出等同于對磁盤文件的讀和寫。?按文件內容可分為:源文件、目標文件、可執行文件、頭文件、數據文件等。在C語言中,文件操作都是由庫函數來完成的。本章將介紹主要的文件操作函數。文件分類文件基本操作文件指針文件指針是一個指向文件有關信息的指針,這些信息包括文件名、狀態和當前位置,它們保存在一個結構體變量中。在使用文件時需要在內存中為其分配空間,用來存放文件的基本信息。該結構體類型是由系統定義的,C語言規定該類型為FILE型,其聲明如下:typedef struct{ short level; unsigned flags; char fd; unsigned char hold; short bsize; unsigned char *buffer; unsigned ar *curp; unsigned istemp; short token;}FILE;從上面的結構中可以發現使用typedef定義了一個FILE為該結構體類型,在編寫程序時可直接使用上面定義的FILE類型來定義變量,注意在定義變量時不必將結構體內容全部給出,只需寫成如下形式:FILE *fp;fopen函數用來打開一個文件,打開文件的操作就是創建一個流。fopen函數的原型在stdio.h中,其調用的一般形式為:FILE *fp;fp=fopen(文件名,使用文件方式);其中,“文件名”是將要被打開文件的文件名,“使用文件方式”是指對打開的文件要進行讀還是寫。使用文件方式如表14.1所示。文件的打開如果要以只讀方式打開文件名為“123”的文本文檔文件,應寫成如下形式:FILE *fp;fp=("123.txt","r");如果使用fopen函數打開文件成功,則返回一個有確定指向的FILE類型指針;若打開失敗,則返回NULL。通常打開失敗的原因有以下幾方面:?指定的盤符或路徑不存在。?文件名中含有無效字符。?以r模式打開一個不存在的文件。文件的打開【實例15.2】 棧在函數調用時的操作。#includevoid DisplayB(char* string) /*函數B*/{ printf("%s\n",string);}void DisplayA(char* string) /*函數A*/{ char String[20]="LoveWorld!"; printf("%s\n",string); DisplayB(String); /*調用函數B*/}int main(){ char String[20]="LoveChina!"; DisplayA(String); /*將參數傳入函數A中*/ return 0;}文件的關閉文件在使用完畢后,應使用fclose函數將其關閉。fclose函數和fopen函數一樣,原型也在stdio.h中,調用的一般形式為:fclose(文件指針);例如:fclose(fp);fclose函數也帶回一個值,當正常完成關閉文件操作時,fclose函數返回值為0,否則返回EOF。文件的讀寫fputc函數fputc函數的一般形式如下:ch=fputc(ch,fp);該函數的作用是把一個字符寫到磁盤文件(fp所指向的是文件)中去。其中ch是要輸出的字符,它可以是一個字符常量,也可以是一個字符變量。fp是文件指針變量。如果函數輸出成功則返回值就是輸出的字符;如果輸出失敗,則返回EOF?!緦嵗?4.1】 編程實現向E:\exp01.txt中寫入“forever…forever…”,以#結束輸入。#include main(){ FILE *fp; /*定義一個指向FILE類型結構體的指針變量*/ char ch; /*定義變量為字符型*/ if ((fp = fopen("E:\\exp01.txt", "w")) == NULL) /*以只寫方式打開指定文件*/ { printf("cannot open file\n"); exit(0); } ch = getchar();/*fgetc函數帶回一個字符賦給ch*/ while (ch != '#') /*當輸入“#”時結束循環*/ { fputc(ch, fp);/*將讀入的字符寫到磁盤文件中*/ ch = getchar(); /*fgetc函數繼續帶回一個字符賦給ch*/ } fclose(fp); /*關閉文件*/}fgetc函數fgetc函數的一般形式如下:ch=fgetc(fp);該函數的作用是從指定的文件(fp指向的文件)讀入一個字符賦給ch。需要注意的是,該文件必須是以讀或讀寫的方式打開。當函數遇到文件結束符時將返回一個文件結束標志EOF?!緦嵗?4.2】 要求在程序執行前創建文件E:\exp02.txt,文檔內容為“even the wise are not always free from error;no man is wise at all times”,在屏幕中顯示出該文件內容。#include main(){ FILE *fp; /*定義一個指向FILE類型結構體的指針變量*/ char ch; /*定義變量及數組為字符型*/ fp = fopen("e:\\exp02.txt", "r"); /*以只讀方式打開指定文件*/ ch = fgetc(fp); /*fgetc函數帶回一個字符賦給ch*/ while (ch != EOF) /*當讀入的字符值等于EOF時結。省略部分。ress any key to continue\n"); getchar(); exit(0); } fprintf(fp,"%c",i);/*將88以字符形式寫入fp所指的磁盤文件中*/ fclose(fp);}將數字88以字符形式寫入磁盤文件中的效果程序運行界面fscanf函數fscanf函數的一般形式如下:fscanf(文件類型指針,格式字符串,輸入列表)例如:fscanf(fp,”%d”,&i);它的作用是讀入fp所指向的文件中的i的值?!緦嵗?4.6】 將文件中的5個字符以整數形式輸出。#include#includemain(){ FILE *fp; char i,j; char filename[30];/*定義一個字符型數組*/ printf("please input filename:\n"); scanf("%s",filename);/*輸入文件名*/ if((fp=fopen(filename,"r"))==NULL)/*判斷文件是否打開失敗*/ { printf("can not open!\npress any key to continue\n"); getchar(); exit(0); } for(i=0;i<5;i++) { fscanf(fp,"%c",&j); printf("%d is:%5d\n",i+1,j); } fclose(fp);}所讀取的磁盤文件中的內容程序運行界面fread函數和fwrite函數能夠實現整塊讀寫功能的fread和fwrite函數。fread函數的一般形式如下:fread(buffer,size,count,fp)該函數的作用是從fp所指的文件中讀入count次,每次讀size字節,讀入的信息存在buffer地址中。fwrite函數的一般形式如下:fwrite(buffer,size,count,fp);它的作用是將buffer地址開始的信息輸出count次,每次寫size字節到fp所指的文件中。文件的定位fseek函數借助緩沖型I/O系統中的fseek函數可以完成隨機讀寫操作。fseek函數的一般形式如下:fseek(文件類型指針,位移量,起始點);該函數的作用是移動文件內部位置指針。其中,“文件類型指針”指向被移動的文件;“位移量”表示移動的字節數,要求位移量是long型數據,以便在文件長度大于64KB時不會出錯。當用常量表示位移量時,要求加后綴“L”;參數“起始點”表示從何處開始計算位移量,規定的起始點有3種:文件首、文件當前位置和文件尾。fseek函數例如:fseek(fp,-20L,1);表示將位置指針從當前位置向后退20個字節。rewind函數前面講過了fseek函數,這里將要介紹的rewind函數也能起到定位文件指針的作用,從而達到隨機讀寫文件的目的。rewind函數的一般形式如下:int rewind(文件類型指針)該函數的作用是使位置指針重新返回文件的開頭,該函數沒有返回值。 rewind應用#include#includemain(){ FILE *fp; char ch,filename[50]; printf("please input filename:\n"); scanf("%s",filename); /*輸入文件名*/ if((fp=fopen(filename,"r"))==NULL) /*以只讀方式打開該文件*/ { printf("cannot open this file.\n"); exit(0); } ch = fgetc(fp); while (ch != EOF) { putchar(ch); /*輸出字符*/ ch = fgetc(fp); /*獲取fp指向文件中的字符*/ } rewind(fp); /*指針指向文件開頭*/ ch = fgetc(fp); while (ch != EOF) { putchar(ch); /*輸出字符*/ ch = fgetc(fp); } fclose(fp); /*關閉文件*/} rewind應用代碼分析程序中通過以下6行語句輸出了第一個“One is not born a genius, one becomes a genius!”。ch = fgetc(fp); while (ch != EOF) { putchar(ch); ch = fgetc(fp); }在輸出了第一個“One is not born a genius, one becomes a genius!”后文件指針已經移動到了該文件的尾部,使用rewind函數再次將文件指針移到文件的開始部分,因此當再次使用上面6行語句時就出現了第二個“One is not born a genius, one becomes a genius!”。ftell函數ftell函數的一般形式如下:long ftell(文件類型指針)該函數的作用是得到流式文件中的當前位置,用相對于文件開頭的位移量來表示。當ftell函數返回值為-1L時,表示出錯。求字符串長度#include#includemain(){ FILE *fp; int n; char ch,filename[50]; printf("please input filename:\n"); scanf("%s",filename); /*輸入文件名*/ if((fp=fopen(filename,"r"))==NULL) /*以只讀方式打開該文件*/ { printf("cannot open this file.\n"); exit(0); } ch = fgetc(fp); while (ch != EOF) { putchar(ch); /*輸出字符*/ ch = fgetc(fp); /*獲取fp指向文件中的字符*/ } n=ftell(fp); printf("\nthe length of the string is:%d\n",n); fclose(fp); /*關閉文件*/}小結本章主要介紹了對文件的一些基本操作,包括文件的打開、關閉、文件的讀寫及定位等。C文件按編碼方式分為二進制文件和ASCII文件。C語言用文件指針標識文件,文件在讀寫操作之前必須打開,讀寫結束必須關閉。文件可以采用不同方式打開,同時必須指定文件的類型。文件的讀寫也分為多種方式,本章中提到了單個字符的讀寫、字符串的讀寫、成塊讀寫以及按指定的格式進行讀寫。文件內部的位置指針可指示當前的讀寫位置,同時也可以移動該指針從而實現對文件的隨機讀寫。
關 鍵 詞:
教學 精通 作者 ppt 入門 14 文件 c語言
 天天文庫所有資源均是用戶自行上傳分享,僅供網友學習交流,未經上傳用戶書面授權,請勿作他用。
關于本文
本文標題:C語言從入門到精通教學課件作者第2版PPT第14章 文件.ppt
鏈接地址: http://www.476824.live/p-51617285.html
關于我們 - 網站聲明 - 網站地圖 - 資源地圖 - 友情鏈接 - 網站客服點擊這里,給天天文庫發消息,QQ:1290478887 - 聯系我們

本站為“文檔C2C交易模式”,即用戶上傳的文檔直接賣給(下載)用戶,本站只是中間服務平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有【成交的100%(原創)】。本站是網絡服務平臺方,若您的權利被侵害,侵權客服QQ:1290478887 歡迎舉報。

[email protected] 2017-2027 http://www.476824.live 網站版權所有

粵ICP備19057495號 

收起
展開
球探网即时蓝球比分 彩票1.998双面盘 赛车开奖直播 广东快乐十分历史走势 短线股票推荐网每日 黑龙江快乐十分分析软件 轴研科技股票 山东11选5什么时候开始 环岛赛体彩开奖结果 黑龙江11选五玩法介绍 河北11选五任选走势图