《C語言程序設計》第9章-文件操作_第1頁
《C語言程序設計》第9章-文件操作_第2頁
《C語言程序設計》第9章-文件操作_第3頁
《C語言程序設計》第9章-文件操作_第4頁
《C語言程序設計》第9章-文件操作_第5頁
已閱讀5頁,還剩15頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

第9章文件操作本章要求:掌握C語言中文件的概念;理解以不同方式打開文件的含義;掌握文件的各種操作函數,能正確對文件進行讀寫數據操作。本章難點:掌握文件的各種操作函數,能正確對文件進行讀寫數據操作。本章重點:掌握文件的各種操作函數,能正確對文件進行讀寫數據操作。9.1文件系統的概念9.1.1C文件概述所謂“文件”一般指存儲在外部介質上數據的集合。C語言把文件看作一個字節序列,即由一連串的字節組成,稱為“流(stream)”,以字節為單位訪問,沒有記錄的界限。輸入輸出字符流的開始和結束只由程序控制而不受物理符號(如回車符)的控制。因此也把這種文件稱作“流式文件”。按文件中數據的組織形式來分:文本文件

每一個字節存放一個ASCII碼,代表一個字符。由文本行組成,并以換行符‘\n’結尾,有文件結束標志。二進制文件

把數據按其在內存中的存儲形式原樣存放在磁盤上,一個字節并不對應一個字符。例:0000010011010010001100010011001000110011001101000000010011010010整數1234內存存儲形式二進制形式ASCII形式特點:存儲量大、速度慢、便于對字符操作特點:存儲量小、速度快、便于存放中間結果9.1.2緩沖文件系統C語言使用的文件系統分為緩沖文件系統(標準I/O)和非緩沖文件系統(系統I/O)。ANSIC標準不再采用非緩沖文件系統。本章主要介紹緩沖文件系統中文件的操作。9.2文件的打開與關閉文件操作的過程:對磁盤文件的操作必須“先打開,后讀寫,最后關閉”。

9.2.1文件類型指針在操作文件時,C語言利用一個結構體類型的變量存放文件的信息。該變量的結構體類型由系統取名為FILE。用一個指針變量指向指向存放該文件信息的結構體類型變量,這個指針稱為文件指針。定義形式:

FILE*指針變量標識符;對文件操作需要#include<stdio.h>9.2.2文件的打開一般形式為:

文件指針名=fopen(文件名,使用文件方式);其中:“文件指針名”是指向FILE類型的指針變量。“文件名”是被打開文件的文件名,可以是字符串常量或字符數組。“使用文件方式”是指文件的類型和操作要求。例如:

FILE*fp;

fp=fopen("c:\\tc\\source.dat","r");注意反斜杠的表示方法見下表打開方式

含義及說明

"r"以只讀方式打開一個文本文件,只允許讀數據。只能打開存在的文件。"w"以只寫方式打開或建立一個文本文件,只允許寫數據。若文件不存在,則新建;若文件存在,則刪除原文件,重新建。"a"以追加方式打開一個文本文件,并在文件末尾寫數據。若文件不存在,則新建;若文件存在,則在源文件末尾添加內容。說明:打開方式帶上“b”表示是對二進制文件進行操作。帶上“+”表示既可以讀,又可以寫,而對待文件存在與否的不同處理則按照“r”、“w”、“a”各自的規定。若打開失敗,fopen都返回一個空指針NULL。文件打開可能出現的錯誤有:試圖以“讀”方式(帶“r”的方式)打開一個并不存在的文件。新建文件,而磁盤上沒有足夠的剩余空間或磁盤被寫保護。試圖以“寫”方式,打開“只讀”文件。帶“w”或“a”或“r+”或“rb+”方式FILE*fp;

fp=fopen("c:\\tc\\source.dat","r");

┇/*此處開始對文件讀*/若打開失敗,fp指針變量里面是空指針NULL,對空指針的讀寫操作會出錯。為避免因上述原因的出錯,常用以下的方法來打開一個文件:if((fp=fopen("c:\\myfile.dat","w+"))==NULL)

printf("Thisfilecouldnotbeopened!\n");else{┇/*此處編寫對文件讀\寫的代碼*/}9.2.3文件的關閉(fclose函數)文件使用完后,為確保文件中的數據不丟失,都要使用文件的關閉函數fclose進行關閉,其調用形式:

fclose(文件指針變量);功能:關閉一個由fopen()函數打開的文件。例如:fclose(fp);

前面例子中,把fopen函數返回的指針賦值給fp,現在用fclose函數使文件指針fp與文件脫離,同時刷新文件輸入/輸出緩沖區。9.3文件的讀寫打開文件后都會返回該文件一個文件類型指針(fp),程序中就是通過這個指針執行對文件的讀和寫。在C語言中提供了多種文件讀寫的函數:字符讀寫函數:fgetc和fputc字符串讀寫函數:fgets和fputs數據塊讀寫函數:fread和fwrite格式化讀寫函數:fscanf和fprinf上面的文件讀寫函數均是指順序讀寫,即讀寫了一條信息后,文件讀寫位置指針自動指向下一個讀寫單元。內容內容內容內容內容內容“r”方式文件讀寫指針內容內容內容內容內容內容“w”方式文件讀寫指針內容內容內容內容內容內容“a”方式文件讀寫指針文件讀寫指針文件讀寫指針文件讀寫指針內容文件讀寫指針注意區別文件指針讀文件時注意不要超過文件末尾:對于文本文件,由于它的結束標記是EOF(即-1)因此可通過讀取的字符是不是結束標志來判斷。對于二進制文件,由于沒有EOF的結束標志,使用系統提供的feof()函數來判斷feof()的使用格式是:feof(fp);其中,fp是文件指針變量,如果文件讀取結束則返回非0值,沒結束返回0。while(!feof(fp))

{…/*此處寫入讀操作語句*/}文本文件也可使用feof()函數按上面來的形式來判斷是否讀取結束。9.3.2字符讀寫函數1.字符讀函數fgetc()功能是從指定的文件中讀一個字符,函數調用的一般形式為:

字符變量=fgetc(文件指針);例如:ch=fgetc(fp);FILE*fp;charch;

fp=fopen("9-1.txt","r");

while(!feof(fp)){ch=fgetc(fp);

putchar(ch);}例:顯示指定文件中的內容2.字符寫函數fputc()將一個字符寫入到文件中,調用的一般格式如下:fputc(ch,fp);

fputc函數也有返回值,若寫操作成功,則返回一個向文件所寫字符的值;否則返回EOF,表示寫操作失敗。fp=fopen("9-1.txt","w");fputc('A',fp);fp=fopen("9-1.txt","a");fputc('A',fp);在e盤新建文件abc.txt,在其中寫入26個大寫字母,每行10個字母例:while((ch=fgetc(fp1))!=EOF)9.3.3字符串讀寫函數1.字符串讀函數fgets():

fgets(字符數組名,n,文件指針);其功能是:從指定的文件中讀一個字符串到字符數組中。從文件中讀出的字符串不超過n-1個字符。在讀入的最后一個字符后加上串結束標志'\0'。注意:fgets函數從文件中讀取字符直到遇見回車符或EOF為止,或直到讀入了所限定的字符數(至多n-1個字符)為止,例如:fgets(str,n,fp);

函數讀成功返回str指針;失敗返回一個空指針NULL。2.字符串寫函數fputs():

fputs(字符串,文件指針);

將指定的字符串寫到文件中,如:

fputs("China",fp);

函數返回0時,表明操作成功;返回非0時,表明寫操作失敗。while((ch=fgetc(fp1))!=EOF)fputc(ch,fp2);charch;while(!feof(fp1)){fgets(ch,80,fp1);fputs(ch,fp2);}charch[80];9.3.4格式讀寫函數1.格式化讀函數fscanf()

fscanf(文件指針,“格式字符串”,輸入列表);2.格式化寫函數fprintf()

fprintf(文件指針,“格式化字符串”,輸出列表);對比scanf()函數和printf()函數從鍵盤輸入:

scanf(“%d”,&a);從文件輸入:

fscanf(fp,“%d”,&a);在屏幕上打印:

printf(“%d”,a);在文件中寫入:

fprintf(fp,“%d”,a);s1.txt文件中存放著一些學生分數,統計及格人數,并把結果寫入s2.txt文件9.3.5數據塊讀寫函數1.寫數據塊函數fwrite()

fwrite(buffer,size,c

溫馨提示

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

評論

0/150

提交評論