C語言程序設計實例教程課件:文件_第1頁
C語言程序設計實例教程課件:文件_第2頁
C語言程序設計實例教程課件:文件_第3頁
C語言程序設計實例教程課件:文件_第4頁
C語言程序設計實例教程課件:文件_第5頁
已閱讀5頁,還剩32頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

文件文件的基本概念8.1常用文件操作的基本函數8.28.1文件的基本概念

計算機信息系統中,根據信息的存儲時間,可以分為臨時性信息和永久性信息。簡單來說,臨時信息存儲在計算機系統臨時存儲設備(例如存儲在計算機內存),這類信息隨系統斷電而丟失。永久性信息存儲在計算機的永久性存儲設備(例如存儲在磁盤和光盤)。永久性的最小存儲單元為文件,因此文件管理是計算機系統中的一個重要的問題。一般來說,每臺計算機都有一個操作系統負責管理計算機的各種資源。操作系統的文件系統負責將外部設備(如硬盤、打印機、光驅等)的信息組織方式進行統一規劃,提供統一的程序訪問數據的方法。8.1.1文件概述

對于操作系統來說,文件是存儲在磁盤上的一個信息序列,操作系統為這個信息序列起一個名稱,這個名稱就叫做文件名(或文件標識符)。由于文件存儲在外存中,外存的信息相對于內存來說是海量的,而且出于安全、規范的角度,不能夠允許程序隨意使用外存的信息,因此,當程序要使用文件時必須向操作系統申請使用,操作系統按規則授權給程序后程序才可以使用,使用完畢后,程序應該通知操作系統。8.1.1文件概述緩沖區:是在內存中開辟的一段區域,當程序需要從外存中讀取文件數據時,系統先讀入足夠多的數據到緩沖區中,然后程序對緩沖區中的數據進行處理。當程序需要寫數據到外存文件中時,同樣要先把數據送入緩沖區中,等緩沖區滿了后,再一起存入外存中。所以程序實際上是通過緩沖區讀寫文件的。數據存儲緩沖區從C語言的角度看,文件實際上是一個存儲在外存中的由一串連續字符(字節)構成的任意信息序列,即字符流。C程序需要按照特定的規則去訪問這個序列。C語言中的文件是邏輯的概念,除了大家熟悉的普通文件外,所有能進行輸入輸出的設備都被看做是文件,如打印機、磁盤機和用戶終端等。8.1.1文件概述終端文件中有3個文件是特殊的,每個C程序都用到。這3個文件是:標準輸入文件(stdin)對應鍵盤,標準輸出文件(stdout)對應終端屏幕,標準出錯信息文件(stderr)對應終端屏幕。這3個文件對所有的C程序都是自動設置和打開的。當程序調用getchar()和scanf()時,就是從標準輸入文件(鍵盤)讀取信息;調用putchar()和printf()就是向標準輸出文件(屏幕)輸出信息。8.1.1文件概述8.1.2文件的類別對于操作系統來說,文件就是一個由字節為單位的信息流序列。如果將C語言涉及的所有數據存儲在文件中,必然有一個約定規則。一個整數存儲在文件中可以有多種方式。如整數28036存儲在文件可直接存儲2個字節0x0B和0x14,也可以直接存儲它的正文方式——‘2’、‘8’、‘0’、‘3’、‘6’。前者稱為二進制方式,后者稱為文本方式(亦稱正文方式)。1.文本文件文本文件是一種典型的順序文件,其文件的邏輯結構又屬于流式文件。文本文件是指以ASCII碼方式(也稱文本方式)存儲的文件,更確切地說,英文、數字等字符存儲的是ASCII碼,而漢字存儲的是機內碼。文本文件中除了存儲文件有效字符信息,包括能用ASCII碼字符表示的回車、換行等信息外,不能存儲其他任何信息,因此文本文件不能存儲聲音、動畫、圖像、視頻等信息。文本文件是把數據當做一個一個字符存儲起來的相應碼值,在采用ASCII碼的計算機系統中存放的就是字符ASCII碼,可見文本文件具有以下的特點:(1)方便人工閱讀,并且可以直接采用編輯工具輸入、閱讀、修改文本文件的數據。(2)文本文件存儲數據無需太多的規定,可以將簡單類型的數據直接寫入到文本文件中,對于結構等非簡單數據存儲到文本文件中就必須逐個分量讀寫。(3)內存中的數據存儲形式和存儲到文本文件中的數據存儲形式不一致,因此所有需要存儲到文本文件中的數據必須先轉換為文本,這本身需要時間。1.文本文件2.二進制文件

文件作為信息存儲的一個基本單位,根據其存儲信息的方式不同,分為文本文件(又名ASCII文件)和二進制文件。如果將存儲的信息采用字符串方式來保存,那么稱此類文件為文本文件。如果將存儲的信息嚴格按其在內存中的存儲形式來保存,則稱此類文件為二進制文件。二進制文件是按照數據的二進制代碼形式直接存入到文件中,二進制文件的特點:(1)直接將字節流寫入文件,方便快捷。不需要作過多的轉換,節約時間、空間。(2)存放到二進制文件中的數據代碼和內存中的數據代碼是一致的。(3)可以存儲任意內存數據,只需要將數據作為一塊二進制序列即可。2.二進制文件

8.1.3文件指針在C語言中定義了一個結構體數據類型FILE來描述文件信息,在“stdio.h”中具體的定義如下:typedefstruct{shortleve1;unsignedflags;charfd;unsignedcharhold;shortbsize;unsignedchar*buffer;unsignedchar*curp;unsignedistemp;shorttoken;}FILE;8.1.3文件指針在C語言中用一個指針變量指向一個文件,這個指針稱為文件指針。引入FILE類型之后,就可以定義文件指針了。定義說明文件指針的一般形式為:FILE*指針變量標識符;其中FILE應為大寫,它是由系統定義的一個結構,該結構中含有文件名、文件狀態和文件當前位置等信息。在編寫源程序時不必關心FILE結構的細節。例如:FILE*fp;表示fp是指向FILE結構的指針變量,通過fp即可找存放某個文件信息的結構變量,然后按結構變量提供的信息找到該文件,實施對文件的操作。習慣上也籠統地把fp稱為指向一個文件的指針。8.1.4文件的操作流程C語言對緩沖文件系統的使用是通過一系列庫函數來實現,讀寫文件必須遵循一定的步驟。C程序打開文件C程序對文件進行讀寫操作系統判斷 C程序發出關閉命令

操作系統關閉文件

文件操作合法

文件操作合法 C程序打開失敗執行C其它語句文件的使用流程

一般來講,以f開頭的函數均為文件處理函數。文件處理函數可以分為如下幾類:1)文件打開與關閉函數;2)文件讀寫函數;3)文件定位函數;4)文件狀態跟蹤函數。8.1.4文件的操作流程8.2常用文件操作的標準函數標準C定義了文件庫函數的原型在<stdio.h>頭文件中。本節介紹文件的打開、讀寫及關閉函數。8.2.1文件的打開與關閉文件在進行讀寫操作之前要先打開,使用完畢要關閉。所謂打開文件,實際上是建立文件的各種有關信息,并使文件指針指向該文件,以便進行其它操作。關閉文件則斷開指針與文件之間的聯系,也就禁止再對該文件進行操作。1.打開文件

在C語言中,除了3個標準文件外的所有文件在讀寫前都必須顯式的打開。文件的打開操作是通過fopen()函數來實現的,此函數的聲明在“stdio.h”中,函數原型如下:FILE*fopen(constchar*filename,constchar*mode);函數返回值——FILE類型指針。如果運行成功,fopen返回文件的地址,否則返NULL。2.關閉文件

在C語言中,文件的關閉是通過fclose()函數來實現。此函數的聲明在“stdio.h”中,函數原型如下:intfclose(FILE*fp);函數返回值——int類型,如果為0,則表示文件關閉成功,否則表示失敗。fclose()函數的作用是關閉已經打開的文件,要求操作系統將文件句柄fp所代表的文件系統進行關閉。【例8.1】打開名為“aa.txt”的文件,并向文件輸出字符串“hello”,然后關閉文件,同時在屏幕上輸出fc1ose的返回值。

8.2.2文本文件的讀寫文件打開之后,就可以進行讀寫操作。文件的讀寫操作通過一組庫函數實現,分為讀函數和寫函數。常用的讀寫函數分為如下幾類:1.字符的讀寫2.數值的讀寫3.格式化讀寫4.塊的讀寫5.字符串的讀寫1.字符的讀寫fputc()函數的作用是從當前文件位置開始向文件輸出一個字符函數形式參數說明如下:intc——準備輸出的字符。FILE*stream——文件地址,為FILE*類型變量。函數返回值——int類型。如果返回值為-1(EOF),則表示字符輸出失敗,否則返回值為c,即與輸出的字符相等。fgetc()函數的作用是從當前文件位置讀取一個字符函數形式參數說明如下:FILE*stream——用讀寫模式和只讀模式打開的文件地址,為FILE*類型變量。函數返回值——int類型。如果返回值為-1,表示已經讀到文件末尾,否則返回讀到的字符。【例8.2】從鍵盤讀取一行字符,并輸出到“test.txt”文件中,再把該文件內容讀出顯示在屏幕上。

1.字符的讀寫2.字符串的讀寫fgets()函數的形式參數如下:char*s——有效內存地址,以便可以存儲從文件讀取的字符串。intn——讀取字符串的長度,確定從文件中讀取多少個字符。實質上,此函數從文件中讀取n-1個字符到當前的字符串中,然后自動添加字符串結束符‘\0’。但是如果此文件中一行長度小于n,則到此行的換行符為止,并將此換行符讀取到字符串中。FILE*stream——文件地址fputs()函數的形式參數如下:constchar*s——有效的字符串,此字符串中不包括‘\n’。intn——字符串長度。實質上,在向文件輸出信息時,并不輸出‘\0’。FILE*stream——文件地址。函數返回值——整型數據,如果函數運行成功,則返回0;否則返回EOF。【例8.3】從test.txt文件中讀入一個含10個字符的字符串。【例8.4】在例8.2中建立的文件test.txt中追加一個字符串。3.塊的讀寫文件輸入輸出函數中還提供了塊的輸入輸出函數,即將內存中的一段信息作為一個整體進行輸入輸出操作,其在“stdio.h”中的函數原型如下:size_tfread(void*ptr,size_tsize,size_tn,FILE*stream);size_tfwrite(constvoid*ptr,size_tsize,size_tn,FILE*stream);其中size_t在“stdio.h”中的定義如下typedefunsignedsize_t;【例8.5】從鍵盤輸入兩個學生數據,寫入一個文件中,再讀出這兩個學生的數據顯示在屏幕上。fread()函數從fp指向的二進制文件中,讀入count個大小為size個字節的數據塊到buf所指向的內存中。如果執行成功,則返回實際讀取的數據塊的個數。例如,從已經打開的文件指針fp所指向的文件中讀入10個長整數到數組longa[20]中,這10個數依次存儲到a[9]開始的10個元素位置。3.塊的讀寫fwrite()函數從buf所指向的內存中,讀入count個大小為size個字節的數據塊寫入到fp指向的文件中。如果執行成功,則返回實際寫入的數據塊的個數。例如,將長整數數組a[20]的前10個元素寫入文件f中。if(fwrite(a,sizeof(long),10,f)!=10)printf(”文件寫出現錯誤!\n”);3.塊的讀寫4.格式化讀寫1.fprintf()函數函數的意義是:將省略號表示的位置列出的表達式的值計算出來后,按mode中指定的格式輸到有fp指向的文件中。2.fscanf()函數函數的意義:從fp指向的文件中,按mode中指定的格式逐個讀取文本數據轉換成指定的數據類型,附給對應指針指向的存儲單元中。【例8.6】用fscanf和fprintf函數完成例8.5的問題。8.2.3文件的隨機訪問與定位文件可以理解為一個完整的數據流,因此可以將“數據流”分為文件頭、文件尾和文件主體三個部分。在C語言中通過FILE類型指針描述文件流的位置,因此FILE類型指針又稱為文件指針。在缺省情況下,文件的讀取是按順序進行的。在完成一段信息的讀寫之后,文件指針移動到其后的位置上準備讀取下一次讀寫。在特殊情況下,需要對文件進行隨機的讀寫,即讀取當前位置的信息后,并不讀取緊接其后的信息,而是根據需要讀取特定位置處的信息。為了滿足文件的隨機讀寫操作,C語言中提供了文件指針定位函數。1.文件定位函數fseek()函數原型:intfseek(FILE*stream,longoffs

溫馨提示

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

評論

0/150

提交評論