C語言程序設計教學課件:第11章 文件_第1頁
C語言程序設計教學課件:第11章 文件_第2頁
C語言程序設計教學課件:第11章 文件_第3頁
C語言程序設計教學課件:第11章 文件_第4頁
C語言程序設計教學課件:第11章 文件_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、共 29 頁 第 1 頁第十一章文 件C語言程序設計共 29 頁 第 2 頁本 章 要 點掌握文件類型指針 (FILE類型指針)掌握文件的打開與關閉 (fopen, fclose)掌握文件的讀寫共 29 頁 第 3 頁11.1 C文件概述1.定義: 文件是指存儲在外部介質上數(shù)據(jù)的集合。操作系統(tǒng)是以文件為單位對數(shù)據(jù)進行管理的。每一個與主機相連的輸入或輸出設備都看作是一個文件。2.組織形式: 按照文件的存儲的編碼形式分為兩類ASCII碼(文本)文件:文件的每一個字節(jié)放一個ASCII代碼,代表一個字符。二進制文件:把內存中的數(shù)據(jù)按其在內存中的存儲形式原樣輸出到磁盤文件上。3. 邏輯結構: 從文件的邏

2、輯結構把文件看做數(shù)據(jù)流字符(字節(jié))序列:由一個個字符(字節(jié))的數(shù)據(jù)順序組成,對文件的存取是以字符(字節(jié))為單位,稱為字符流。二進制流共 29 頁 第 4 頁4. 輸入輸出方式緩沖文件系統(tǒng): 由于系統(tǒng)對從磁盤文件數(shù)據(jù)的存取速度與內存數(shù)據(jù)存取訪問的速度不同,文件數(shù)據(jù)量較大,數(shù)據(jù)的讀寫不可能瞬間完成。為了提高數(shù)據(jù)存取速度,C程序對文件的處理采用緩沖文件系統(tǒng)方式進行。要求程序與文件之間有一個內存緩沖區(qū),程序與文件的數(shù)據(jù)交換通過緩沖區(qū)進行。緩沖區(qū)的大小由C系統(tǒng)決定。 系統(tǒng)自動為每一個文件分配一個內存緩沖區(qū),當程序要向磁盤文件寫入數(shù)據(jù) ,必須先送到緩沖區(qū),由操作系統(tǒng)把緩沖區(qū)的數(shù)據(jù)存入磁盤。從文件向內存讀入

3、數(shù)據(jù),先由操作系統(tǒng)把數(shù)據(jù)讀入緩沖區(qū),然后程序將數(shù)據(jù)從緩沖區(qū)讀入內存。 共 29 頁 第 5 頁非緩沖文件系統(tǒng): 系統(tǒng)不自動開辟確定大小的緩沖區(qū),而由程序為每個文件設定緩沖區(qū)。 不同的操作系統(tǒng)對文件的處理采用不同的方式,UNIX用緩沖文件系統(tǒng)處理文本文件,用非緩沖系統(tǒng)處理二進制文件。標準C只采用緩沖文件系統(tǒng)。共 29 頁 第 6 頁 C程序對文件的所有操作通過對文件緩沖區(qū)的操作來完成。對文件的讀寫操作通過庫函數(shù)實現(xiàn)。程序要處理文件時,只需要跟內存緩沖區(qū)打交道,而不必考慮外部磁盤的特性。程序數(shù)據(jù)區(qū)輸出文件緩沖區(qū)輸入文件緩沖區(qū)磁盤操作系統(tǒng)自動完成程序控制共 29 頁 第 7 頁11.2 文件類型指針

4、結構體類型 FILE 每個被使用的文件都在內存中開辟一個區(qū)域,用來存放文件的有關信息(如文件名,狀態(tài),當前位置等)。這些信息保存在一個結構體類型的變量中。定義:緩沖文件系統(tǒng)中,獲取內存中存放文件有關信息的結構體的指針定義為文件類型指針。通過文件指針變量能找到指定的文件,以實現(xiàn)對文件的訪問。共 29 頁 第 8 頁對文件操作的相關信息的結構體類型由系統(tǒng)定義為“FILE”,包含在 stdio.h文件中:如typedef struct int _fd;; /* 文件號 */ int _cleft; /* 緩沖區(qū)中剩下的字符 */ int _mode; /* 文件操作模式 */ char *_next

5、tc; /* 下一個字符位置 */ char *_buff; /* 文件緩沖區(qū)位置 */ FILE;共 29 頁 第 9 頁例:定義一個文件指針變量FILE *fp;fp是一個指向FILE結構體類型的指針變量。可以使 fp指向某一個具體文件的結構體變量,通過讀取該結構體變量中的有關信息來實現(xiàn)對文件的訪問和操作。也就是通過fp 指定要被訪問的文件。提示:文件操作具有順序性,文件指針不能進行fp+或fp操作,前一個數(shù)據(jù)取出后,下一次將順序取后一個數(shù)據(jù)。共 29 頁 第 10 頁文件的一般操作過程 打開文件 建立用戶程序與文件的聯(lián)系 操作文件 對文件進行讀、寫、追加等操作 關閉文件 切斷文件與程序的

6、聯(lián)系共 29 頁 第 11 頁11.3 文件的打開與關閉11.3.1 文件的打開(函數(shù) fopen)功能:在對文件讀寫之前打開文件。調用方式: FILE *fp; fp=fopen(文件名,使用文件方式);返回值:指定文件的指針,若失敗返回 NULL三要素:文件指針,文件名,使用方式例:fp=fopen(“m1”,”r”); fp=fopen(“e:mydata.dat”,”r”);表示打開名為m1的文件,使用方式為“讀入”.提示:文件名和打開方式都是字符串,一般要指出文件存放的路徑,不指出路徑則默認與當前程序的路徑相同。共 29 頁 第 12 頁文件使用方式共 29 頁 第 13 頁文件使用

7、方式共 29 頁 第 14 頁 進行文件讀寫的一般規(guī)則1. 讀文件 指定的文件必須存在,否則出錯;2. 寫文件(指定的文件可以存在,也可以不存在) (1)以“w”方式寫: if該文件已經(jīng)存在 原文件將被刪去然后重新建立; else 按指定的名字新建一個文件; (2)以“a”方式寫: if該文件已經(jīng)存在 寫入的數(shù)據(jù)附加在原數(shù)據(jù)后邊; else 按指定的名字新建一個文件(與“w”相同); (3)文件同時讀和寫: 使用“r+”、“w+”、“ a+”打開文件。共 29 頁 第 15 頁11.3.2 文件的關閉(函數(shù) fclose)功能:使用文件之后關閉文件。使文件指針變量不再指向該文件。調用方式: f

8、close(文件指針);返回值:關閉成功返回 0,若失敗返回 非零值。例: fclose (fp); 在程序結束之前關閉所有使用的文件,如果不關閉文件可能會丟失數(shù)據(jù)。用fclose關閉文件,將緩沖區(qū)的數(shù)據(jù)輸出到磁盤后再釋放文件指針變量,可避免數(shù)據(jù)丟失。共 29 頁 第 16 頁11.4 文件的讀寫11.4.1 格式化讀寫函數(shù) fscanf 功能:將指定磁盤文件格式化賦給指定對象。 fprintf 功能:將指定對象格式化輸出到指定磁盤文件上。格式: fprintf (文件指針,格式字符串,輸出表列) fscanf (文件指針,格式字符串,輸入表列)例:fscanf(fp,”%d,%f”,&i,&

9、a); 從fp所指向的文件中,取出數(shù)據(jù)賦給i和a. fprintf(fp,”%d,%f”,a,b); 將a和b的值按指定格式寫入到fp所指向的文件中。共 29 頁 第 17 頁例1: 將兩個變量的數(shù)值寫入test.txt 。# include “stdio.h”main( )FILE *fp;int i=3; float t=4.5;if (fp=fopen(“test.txt”, “w”) = NULL) printf (“file open failed”); exit(0); fprintf(fp,”%d, %6.2f”,i, t );fclose (fp);運行結果:test.txt

10、的內容是3,4.50定義文件指針變量寫入i, t 關閉文件共 29 頁 第 18 頁11.4.2 fputc函數(shù)和fgetc函數(shù)fputc 功能: 把一個字符寫到fp所指向的磁盤文件中。 格式: fputc(ch , fp);文件類型指針變量要輸出的字符 fgetc 功能:從指定磁盤文件讀出一個字符,該文件必須 是以讀或讀寫的方式打開的。 格式:ch=fgetc(fp); 文件類型指針變量字符變量若讀到文件尾結束符時,函數(shù)返回一個文件結束標志EOF(值為-1)??捎胒eof(fp)處理文件是否結束,為1結束,否則為0。 若寫成功,函數(shù)返回該字符,否則返回一個文件結束標志EOF(值為-1)。共

11、29 頁 第 19 頁11.4.3 fread函數(shù)和fwrite函數(shù)fread 功能:從指定磁盤文件讀入一組數(shù)據(jù)。 格式: fread(buffer, size, count, fp);要讀寫的字節(jié)數(shù)指針,即讀入數(shù)據(jù)的存放地址文件類型指針變量要進行讀寫多少個size字節(jié)的數(shù)據(jù)項例:int a3, FILE *fp= fopen (.); fread(a,4,3,fp); a數(shù)組名,從fp所指向的文件中讀出3次數(shù)據(jù),每次4個字節(jié),存入a數(shù)組中。共 29 頁 第 20 頁 fwrite 功能:把一組數(shù)據(jù)寫到指定磁盤文件上。 格式: fwrite(buffer,size,count, fp);fre

12、ad()、fwrite()用于讀寫數(shù)據(jù)塊(指定字節(jié)數(shù)量,如一個數(shù)組元素、一個結構變量的值等。多用于讀寫二進制文件。 例:int a3; FILE *fp= fopen (.); fwrite(a,4,3,fp); a數(shù)組名,從a數(shù)組中中讀出3次數(shù)據(jù),每次4個字節(jié),存入fp所指向的文件。共 29 頁 第 21 頁例如:假設學生的數(shù)據(jù)已存放在磁盤文件中,可用以下for語句和fread函數(shù)讀入40個學生的數(shù)據(jù)。for(i=0; i40; i+) fread(&studi, sizeof(struct student_type), 1, fp);可用以下的for語句和fwrite函數(shù)將內存中40個學生

13、的數(shù)據(jù)輸出到磁盤文件中去。for(i=0; i40; i+) fwrite(&studi,sizeof(struct student_type), 1,fp);共 29 頁 第 22 頁11.4.4 fgets函數(shù)和fputs函數(shù)fgets 功能: 從文件讀入一個指定的字符串到內存中。 例: fgets(str,n,fp); 從fp指向的文件讀出一個具有n-1個字符的字符串,存入其始地址為str的內存中.fputs 功能:將指定的字符串輸出到fp所指向的文件中. fputs(str,fp);共 29 頁 第 23 頁檢測文件指針函數(shù): feof()調用一般形式: feof(fp);功能:檢測文

14、件指針是否到文件尾,若到文件尾,函數(shù)值為真(非0),否則為假。exit(0):系統(tǒng)標準函數(shù),作用是關閉所有打開的文件,并終止程序的執(zhí)行。參數(shù)0表示程序正常結束,非0參數(shù)通常表示不正常的程序結束。共 29 頁 第 24 頁例2:將一個磁盤文件中的信息復制到另一個磁盤文件中。#include “stdio.h”main( ) FILE *in, *out;char ch,infile10,outfile10;printf(“%Enter the infile name:n”);scanf(“%s”, infile);printf(“Enter the outfile name: n);scanf(

15、“%s”, outfile);共 29 頁 第 25 頁if(in=fopen(infile, “r”)=NULL) printf(“cannot open infilen”); exit(0); if(out=fopen(outfile,”w”)=NULL) printf(“cannot open infilen”); exit(0); while(!feof(in) fputc(fgetc(in), out);fclose(in);fclose(out);值為1數(shù)據(jù)讀取結束在while循環(huán)中,只要!feof(in)為真,說明in還沒有指到文件尾共 29 頁 第 26 頁 例3:已有文本文件

16、test.txt,內容為Hello,everyone!,以下程序中文件test.txt已正確為讀而打開,由文件指針fr指向該文件,則程序輸出結果為_.#include main() FILE *fr;char str40; fgets(str,5,fr); printf(%sn,str); fclose(fr); Hell從fr指向的文件讀出一個具有5-1個字符的字符串,存入起始地址為str的內存中.共 29 頁 第 27 頁文件編程綜合示例: 現(xiàn)有某學院2009級8班的三十名學生的成績數(shù)據(jù)(包括學號,姓名,三門課成績,平均成績), 存放在data08.txt文件中。編寫程序從文件讀入以上數(shù)據(jù)

17、,計算出每名學生的平均成績,再將成績數(shù)據(jù)存放在data08_a.txt文件中。 共 29 頁 第 28 頁#include stdio.hstruct student long num; char name8; int score3; float avr; stu30;main()int i,j,sum;FILE *fp1;/*讀文件*/if(fp1=fopen(“data08.txt, r)=NULL) printf(Cannot open file!); return 0;for(i=0;i30;i+)fscanf(fp1,%ld%s%d%d%d,&stui.num,,&stui.score0,&stui.score1,&stui.score2);共 29 頁 第 29 頁/*計算*/for(i=0;i

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論