正文 第49章 文件1(2 / 3)

例如:

while(!feof(fp))

{intc;

c=fgetc(fp);

……

當未遇到文件的結束標誌-1時,feof(fp)即可檢測到並且返回值為0,此程序段的含義是:當!feof(fp)為1,讀入一個字節的數據賦給整型變量c,並接著對其進行所需的處理。直到遇到文件結束,feof(fp)的值為1,!feof(fp)為0,不再執行while循環。這種方法也適用於文本文件。

文件在進行讀寫操作之前要先打開,使用完畢要關閉。所謂打開文件,實際上是建立文件的各種有關信息,並使文件指針指向該文件,以便進行其他操作。關閉文件則斷開指針與文件之間的聯係,也就禁止再對該文件進行操作。在C語言中,文件操作都是由庫函數來完成的。這兩個係統函數均包含在頭文件“stdio.h”中。

文件在進行讀寫操作之前要先打開,然後才能對文件進行數據的操作。C語言中利用fopen函數來打開一個文件,其調用的一般形式為:

fp=fopen(文件名,使用文件方式);

其中,“fp”是用FILE*fp定義的FILE類型的指針變量,“文件名”是被打開文件的文件名(文件名必須包括其路徑),文件名是由字符串常量或字符串數組組成的。例如:

FILE*fp;

fp=("myfile","r");

其含義是在當前目錄下打開文件myfile,並且隻允許進行讀操作,同時使文件指針fp指向該文件。但是應該注意,在文件名串中,不得直接使用路徑描述符“\”,而必須采用其轉義字符形式“\\”,第一個“\”表示轉義字符,第二個“\”表示路徑描述符。

一般使用到文件的C語言程序段,都會有下麵的幾句話,用來提示文件的打開和關閉狀態:

if((fp=fopen("文件名","使用方式")==NULL)

{printf("\ncannotopenfiled:\cfile!");

exit(1);

(1)其中的“文件名”必須是被說明為FILE類型的指針變量。

(2)文件使用方式由r(read)、w(write)、a(append)、t(text)、b(binary)、+(read/write)6個字符拚成。其中,用“r”方式打開一個文件時,該文件必須已經存在,且隻能從該文件讀出。“w”方式打開的文件隻能向該文件寫入,若打開的文件不存在,則以指定的文件名建立該文件,若打開的文件已經存在,則將該文件刪去,重建一個新文件。“a”方式打開的文件可以向其末尾追加新的數據。“b”方式表示打開的是二進製文件。“t”方式表示打開的是文本文件。“+”表示打開的文件既可以用來輸入,又可以用來輸出。

(3)若要向一個已存在的文件追加新的信息,隻能用“a”方式打開文件。但此時該文件必須是存在的,否則將會出錯。

(4)在打開一個文件時,如果出錯,fopen將返回一個空指針值NULL。在程序中可以用這一信息來判別是否完成打開文件的工作,並作相應的處理。因此常用以下程序段打開文件:

if((fp=fopen("d:\\cfile","rb")==NULL)

printf("\ncannotopenfiled:\cfile!");

getch();

exit(1);

這段程序的含義是,如果返回的指針為空,則表示不能打開d盤根目錄下的cfile文件,並給出提示信息“cannotopenfiled:\cfile!”,下一行getch();的功能是從鍵盤輸入一個字符,但不在屏幕上顯示。在這裏,該行的作用是等待,隻有當用戶從鍵盤敲任一鍵時,程序才繼續執行,因此用戶可利用這個等待時間閱讀出錯提示。敲鍵後執行exit(1);退出程序。