❶ c語言程序設計文件打開關閉
在C語言中用一個指針變數指向一個文件,這個指針稱為文件指針。通過文件指針就可對它所指的文件進行各種操作。
定義說明文件指針的一般形式為:
FILE *指針變數標識符;
其中FILE應為大寫,它實際上是由系統定義的一個結構,該結構中含有文件名、文件狀態和文件當前位置等信息。在編寫源程序時不必關心FILE結構的細節。例如:
FILE *fp;
表示fp是指向FILE結構的指針變數,通過fp即可找存放某個文件信息的結構變數,然後按結構變數提供的信息找到該文件,實施對文件的操作。習慣上也籠統地把fp稱為指向一個文件的指針。
文件在進行讀寫操作之前要先打開,使用完畢要關閉。所謂打開文件,實際上是建立文件的各種有關信息,並使文件指針指向該文件,以便進行其它操作。關閉文件則斷開指針與文件之間的聯系,也就禁止再對該文件進行操作。
在C語言中,文件操作都是由庫函數來完成的。在本章內將介紹主要的文件操作函數。
文件的打開(fopen函數)
fopen函數用來打開一個文件,其調用的一般形式為:
文件指針名 = fopen( 文件名, 使用文件方式 );
其中:
「文件指針名」必須是被說明為FILE 類型的指針變數;
「文件名」是被打開文件的文件名;
「使用文件方式」是指文件的類型和操作要求;
「文件名」是字元串常量或字元串數組。
例如:
FILE *fp;
fp=("file a","r");
其意義是在當前目錄下打開文件file a,只允許進行「讀」操作,並使fp指向該文件。又如:
FILE *fphzk;
fphzk=("c:\\hzk16","rb");
其意義是打開C驅動器磁碟的根目錄下的文件hzk16,這是一個二進制文件,只允許按二進制方式進行讀操作。兩個反斜線「\\ 」中的第一個表示轉義字元,第二個表示根目錄。
使用文件的方式共有12種,下面給出了它們的符號和意義。
文件使用方式
意義
rt 只讀打開一個文本文件,只允許讀數據
wt 只寫打開或建立一個文本文件,只允許寫數據
at 追加打開一個文本文件,並在文件末尾寫數據
rb 只讀打開一個二進制文件,只允許讀數據
wb 只寫打開或建立一個二進制文件,只允許寫數據
ab 追加打開一個二進制文件,並在文件末尾寫數據
rt+ 讀寫打開一個文本文件,允許讀和寫
wt+ 讀寫打開或建立一個文本文件,允許讀寫
at+ 讀寫打開一個文本文件,允許讀,或在文件末追加數據
rb+ 讀寫打開一個二進制文件,允許讀和寫
wb+ 讀寫打開或建立一個二進制文件,允許讀和寫
ab+ 讀寫打開一個二進制文件,允許讀,或在文件末追加數據
對於文件使用方式有以下幾點說明。
1) 文件使用方式由r、w、a、t、b 和 + 六個字元拼成,各字元的含義是:
r(read):讀
w(write):寫
a(append):追加
t(text):文本文件,可省略不寫
b(banary):二進制文件
+:讀和寫
2) 凡用「r」打開一個文件時,該文件必須已經存在,且只能從該文件讀出。
3) 用「w」打開的文件只能向該文件寫入。若打開的文件不存在,則以指定的文件名建立該文件,若打開的文件已經存在,則將該文件刪去,重建一個新文件。
4) 若要向一個已存在的文件追加新的信息,只能用「a」方式打開文件。但此時該文件必須是存在的,否則將會出錯。
5) 在打開一個文件時,如果出錯,fopen將返回一個空指針值NULL。在程序中可以用這一信息來判別是否完成打開文件的工作,並作相應的處理。因此常用以下程序段打開文件:
if((fp=fopen("c:\\hzk16","rb")==NULL){
printf("\nerror on open c:\\hzk16 file!");
getch();
exit(1);
}
這段程序的意義是,如果返回的指針為空,表示不能打開C盤根目錄下的hzk16文件,則給出提示信息「error on open c:\ hzk16 file!」,下一行getch()的功能是從鍵盤輸入一個字元,但不在屏幕上顯示。在這里,該行的作用是等待,只有當用戶從鍵盤敲任一鍵時,程序才繼續執行,因此用戶可利用這個等待時間閱讀出錯提示。敲鍵後執行exit(1)退出程序。
6) 把一個文本文件讀入內存時,要將ASCII碼轉換成二進制碼,而把文件以文本方式寫入磁碟時,也要把二進制碼轉換成ASCII碼,因此文本文件的讀寫要花費較多的轉換時間。對二進制文件的讀寫不存在這種轉換。
7) 標准輸入文件(鍵盤),標准輸出文件(顯示器),標准出錯輸出(出錯信息)是由系統打開的,可直接使用。
文件關閉函數(fclose函數)
文件一旦使用完畢,應用關閉文件函數把文件關閉,以避免文件的數據丟失等錯誤。
fclose函數調用的一般形式是:
fclose(文件指針);
例如:
fclose(fp);
正常完成關閉文件操作時,fclose函數返回值為0。如返回非零值則表示有錯誤發生。
❷ c語言 文件打開失敗,還需要關閉嗎
不用,打開失敗,就無法獲得文件句柄,所以也無需關閉了
❸ C語言中為什麼要對文件進行打開和關閉
要區分內存和硬碟,文件是存儲在硬碟上的,而你的程序是運行在內存中的。當你想訪問一個文件的內容的時候,需要把該文件相應的句柄和頭部信息放到內存中。打開操作相當於建立了一個與硬碟之間的通道,以便你進行讀取和寫入;而所謂的讀取就是把文件內容拷貝至內存的過程,寫入則是把更改後的內容存儲到硬碟的過程(當然不是直接寫,而是先在內存中完成)。當完成讀寫操作後,會把更新後的文件寫回硬碟,進行關閉操作,把這個通道關閉掉。