C Note(NO.8)

“文件”是指一組相關數據的有序集合。這個數據集有一個名稱,叫做文件名。

從用戶的角度看,文件可分爲普通文件和設備文件兩種。


普通文件是指駐留在磁盤或其它外部介質上的一個有序數據集,可以是源文件、目標文件、可執行程序;也可以是一組待輸入處理的原始數據,或者是一組輸出的結果。對於源文件、目標文件、可執行程序可以稱作程序文件,對輸入輸出數據可稱作數據文件。

設備文件是指與主機相聯的各種外部設備,在操作系統中,把外部設備也看作是一個文件來進行管理,把它們的輸入、輸出等同於對磁盤文件的讀和寫。通常把顯示器定義爲標準輸出文件,一般情況下在屏幕上顯示有關信息就是向標準輸出文件輸出。鍵盤通常被指定標準的輸入文件,從鍵盤上輸入就意味着從標準輸入文件上輸入數據。

從文件編碼的方式來看,文件可分爲 ASCII 碼文件和二進制碼文件兩種。 ASCII 文件也稱爲文本文件,這種文件在磁盤中存放時每個字符對應一個字節,用於存放對應的 ASCII碼。二進制文件是按二進制的編碼方式來存放文件的。
C 系統在處理這些文件時,並不區分類型,都看成是字符流,按字節進行處理。輸入輸出字符流的開始和結束只由程序控制而不受物理符號(如回車符)的控制。 因此
也把這種文件稱作“流式文件”。

定義說明文件指針的一般形式爲:
         FILE *指針變量標識符;
其中 FILE 應爲大寫,它實際上是由系統定義的一個結構,該結構中含有文件名、文件狀態和文件當前位置等信息。

fopen 函數用來打開一個文件,其調用的一般形式爲:
      文件指針名=fopen(文件名,使用文件方式);

      FILE *fphzk
      fphzk=("c:\\hzk16","rb")
其中,
  “文件指針名”必須是被說明爲 FILE 類型的指針變量;
  “文件名”是被打開文件的文件名;
  “使用文件方式”是指文件的類型和操作要求。
  “文件名”是字符串常量或字符串數組。

文件的方式共有 12 種:


  文件使用方式由 r,w,a,t,b, +六個字符拼成,各字符的含義是:
r(read):
w(write):
a(append):
t(text):
b(banary):
+:


追加
文本文件,可省略不寫
二進制文件
讀和寫

2) 凡用“ r”打開一個文件時,該文件必須已經存在,且只能從該文件讀出。
3) 用“ w”打開的文件只能向該文件寫入。若打開的文件不存在,則以指定的文件名建立
該文件,若打開的文件已經存在,則將該文件刪去,重建一個新文件。
4) 若要向一個已存在的文件追加新的信息,只能用“ a”方式打開文件。但此時該文件必
須是存在的,否則將會出錯。
5) 在打開一個文件時,如果出錯, fopen 將返回一個空指針值 NULL。在程序中可以用這一
信息來判別是否完成打開文件的工作,並作相應的處理。因此常用以下程序段打開文件:
6) if((fp=fopen("c:\\hzk16","rb")==NULL)
{
  printf("\nerror on open c:\\hzk16 file!");
  getch();
  exit(1);
}
 

fclose 函數調用的一般形式是:
    fclose(文件指針);
對文件的讀和寫是最常用的文件操作。在C語言中提供了多種文件讀寫的函數:
·字符讀寫函數 : fgetc 和 fputc     

fgetc 函數的功能是從指定的文件中讀一個字符,函數調用的形式爲:

       字符變量=fgetc(文件指針);

1) 在 fgetc 函數調用中,讀取的文件必須是以讀或讀寫方式打開的。
2) 讀取字符的結果也可以不向字符變量賦值
3) 在文件內部有一個位置指針。用來指向文件的當前讀寫字節。在文件打開時,該指
針總是指向文件的第一個字節。使用 fgetc 函數後,該位置指針將向後移動一個字
節。 因此可連續多次使用 fgetc 函數,讀取多個字符。

fputc 函數的功能是把一個字符寫入指定的文件中,函數調用的形式爲:

      fputc(字符量,文件指針);
其中,待寫入的字符量可以是字符常量或變量

1) 被寫入的文件可以用寫、讀寫、追加方式打開,用寫或讀寫方式打開一個已存在的
文件時將清除原有的文件內容,寫入字符從文件首開始。如需保留原有文件內容,
希望寫入的字符以文件末開始存放,必須以追加方式打開文件。被寫入的文件若不
存在,則創建該文件。
2) 每寫入一個字符,文件內部位置指針向後移動一個字節。
3) fputc 函數有一個返回值,如寫入成功則返回寫入的字符,否則返回一個 EOF。可
用此來判斷寫入是否成功

      
·字符串讀寫函數: fgets 和 fputs

數的功能是從指定的文件中讀一個字符串到字符數組中,函數調用的形式爲:

      fgets(字符數組名,n,文件指針);
其中的 n 是一個正整數。表示從文件中讀出的字符串不超過 n-1 個字符。在讀入的最後一個字符後加上串結束標誌'\0'。

 

fputs 函數的功能是向指定的文件寫入一個字符串,其調用形式爲:

      fputs(字符串,文件指針);
其中字符串可以是字符串常量,也可以是字符數組名,或指針變量,

數據塊讀寫函數: freed 和 fwrite

讀數據塊函數調用的一般形式爲:
   fread(buffer,size,count,fp);
寫數據塊函數調用的一般形式爲:
   fwrite(buffer,size,count,fp);
其中:

 

 
buffer 是一個指針,在 fread 函數中,它表示存放輸入數據的首地址。在 fwrite 函
數中,它表示存放輸出數據的首地址。
size
count
fp
表示數據塊的字節數。
表示要讀寫的數據塊塊數。
表示文件指針。

 

格式化讀寫函數: fscanf 和 fprinf

fscanf 函數, fprintf 函數與前面使用的 scanf 和 printf 函數的功能相似,都是格式
化讀寫函數。兩者的區別在於 fscanf 函數和 fprintf 函數的讀寫對象不是鍵盤和顯示器,
而是磁盤文件。
這兩個函數的調用格式爲:
fscanf(文件指針,格式字符串,輸入表列);
fprintf(文件指針,格式字符串,輸出表列);

 

 

rewind(文件指針);它的功能是把文件內部的位置指針移到文件首。
fseek 函數用來移動文件內部位置指針,其調用形式爲:fseek(文件指針,位移量,起始點);

其中:
“文件指針”指向被移動的文件。
“位移量”表示移動的字節數,要求位移量是 long 型數據,以便在文件長度大於 64KB 時不
會出錯。當用常量表示位移量時,要求加後綴“L”。
“起始點”表示從何處開始計算位移量,規定的起始點有三種:文件首,當前位置和文件尾。
其表示方法如下表。

起始點 表示符號 數字表示
文件首 SEEK_SET 0
當前位置 SEEK_CUR 1
文件末尾 SEEK_END 2


feof(文件指針);
功能:判斷文件是否處於文件結束位置,如文件結束,則返回值爲 1,否則爲 0。


ferror(文件指針);
功能:檢查文件在用各種輸入輸出函數進行讀寫時是否出錯。如 ferror 返回值爲 0 表示未
出錯,否則表示有錯。

clearerr(文件指針);
功能:本函數用於清除出錯標誌和文件結束標誌,使它們爲 0 值。

 




 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章