13.3 檔案的開啟與關閉
檔案在進行讀寫操作之前要先開啟,使用完畢要關閉。所謂開啟檔案,實際上是建立檔案的各種有關資訊,並使檔案指標指向該檔案,以便進行其它操作。關閉檔案則斷開指標與檔案之間的聯絡,也就禁止再對該檔案進行操作。
在c語言中,檔案操作都是由庫函式來完成的。在本章內將介紹主要的檔案操作函式。
13.3.1 檔案的開啟(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): 寫
t(text): 文字檔案,可省略不寫
b(banary): 二進位制檔案
+: 讀和寫
2) 凡用「r」開啟乙個檔案時,該檔案必須已經存在,且只能從該檔案讀出。
3) 用「w」開啟的檔案只能向該檔案寫入。若開啟的檔案不存在,則以指定的檔名建立該檔案,若開啟的檔案已經存在,則將該檔案刪去,重建乙個新檔案。
4) 若要向乙個已存在的檔案追加新的資訊,只能用「a」方式開啟檔案。但此時該檔案必須是存在的,否則將會出錯。
5) 在開啟乙個檔案時,如果出錯,fopen將返回乙個空指標值null。在程式中可以用這一資訊來判別是否完成開啟檔案的工作,並作相應的處理。因此常用以下程式段開啟檔案:
6) if((fp=fopen("c:\\hzk16","rb")==null)
這段程式的意義是,如果返回的指標為空,表示不能開啟c盤根目錄下的hzk16檔案,則給出提示資訊「error on open c:\ hzk16 file!」,下一行getch()的功能是從鍵盤輸入乙個字元,但不在螢幕上顯示。在這裡,該行的作用是等待,只有當使用者從鍵盤敲任一lose函式返回值為0。如返回非零值則表示有錯誤發生。
13.4 檔案的讀寫
對檔案的讀和寫是最常用的檔案操作。在c語言中提供了多種檔案讀寫的函式:
·字元讀寫函式 :fgetc和fputc
·字串讀寫函式:fgets和fputs
·資料塊讀寫函式:freed和fwrite
·格式化讀寫函式:fscanf和fprinf
下面分別予以介紹。使用以上函式都要求包含標頭檔案stdio.h。
13.4.1 字元讀寫函式fgetc和fputc
字元讀寫函式是以字元(位元組)為單位的讀寫函式。每次可從檔案讀出或向檔案寫入乙個字元。
1. 讀字元函式fgetc
fgetc函式的功能是從指定的檔案中讀乙個字元,函式呼叫的形式為:
字元變數=fgetc(檔案指標);
例如:
ch=fgetc(fp);
其意義是從開啟的檔案fp中讀取乙個字元並送入ch中。
對於fgetc函式的使用有以下幾點說明:
1) 在fgetc函式呼叫中,讀取的檔案必須是以讀或讀寫方式開啟的。
2) 讀取字元的結果也可以不向字元變數賦值,
例如:
fgetc(fp);
但是讀出的字元不能儲存。
3) 在檔案內部有乙個位置指標。用來指向檔案的當前讀寫位元組。在檔案開啟時,該指標總是指向檔案的第乙個位元組。使用fgetc 函式後,該位置指標將向後移動乙個位元組。 因此可連續多次使用fgetc函式,讀取多個字元。應注意檔案指標和檔案內部的位置指標不是一回事。檔案指標是指向整個檔案的,須在程式中定義說明,只要不重新賦值,檔案指標的值是不變的。檔案內部的位置指標用以指示檔案內部的當前讀寫位置,每讀寫一次,該指標均向後移動,它不需在程式中定義說明,而是由系統自動設定的。
【例13.1】讀入檔案c1.doc,在螢幕上輸出。
#include
main()
ch=fgetc(fp);
while(ch!=eof)
fclose(fp);
} 本例程式的功能是從檔案中逐個讀取字元,在螢幕上顯示。程式定義了檔案指標fp,以讀文字檔案方式開啟檔案「d:\\jrzh\\example\\ex1_1.c」,並使fp指向該檔案。如開啟檔案出錯,給出提示並退出程式。程式第12行先讀出乙個字元,然後進入迴圈,只要讀出的字元不是檔案結束標誌(每上,再讀入下一字元。每讀一次,檔案內部的位置指標向後??本程式將顯示整個檔案。
2. 寫字元函式fputc
fputc函式的功能??為:
fputc(字元量,檔案指量或變數,例如:
fputc('a',fp);
其意putc函式的使用也要說明幾點:
1) 被寫入的檔案可以用寫、讀寫、追加方式開啟,用寫或讀寫方式??寫入字元從檔案首開始。如需保留原有檔案內容,希望寫入的字??被寫入的檔案若不存在,則建立該檔案。
2) 每寫入乙個字元,檔案內部位置指標向後移動乙個位元組。
3) fputc函式有乙個返回值,如寫入成功則返回寫入的字元,否則返回乙個eof。可用此來判斷寫符,寫入乙個檔案,再把該檔案內容讀出顯示在螢幕上。
#include
main()
printf(
"input a string:\n"
);ch=getchar();
while (ch!='\n')
rewind(fp);
ch=fgetc(fp);
while(ch!=eof)
printf(
"\n"
);fclose(fp);
} 程式中第6行以讀寫文字檔案方式開啟檔案string。程式第13行從鍵盤讀入乙個字元後進入迴圈,當讀入字元不為回車符時,則把該字元寫入檔案之中,然後繼續從鍵盤讀入下一字元。每輸入乙個字元,檔案內部位置指標向後移動乙個位元組。寫入完畢,該指標已指向檔案末。如要把檔案從頭讀出,須把指標移向檔案頭,程式第19行rewind函式用於把fp所指檔案的內部位置指標移到檔案頭。第20至25行用於讀出檔案中的一行內容。
【例13.3】把命令列引數中的前乙個檔名標識的檔案,複製到後乙個檔名標識的檔案中,如命令列中只有乙個檔名則把該檔案寫到標準輸出檔案(顯示器)中。
#include
main(int argc,char *argv)
if((fp1=fopen(argv[1],
"rt"
))==null)
附上初值後的內容,一百條;
向檔案裡面吸入資料,,,然後檔案讀出來時
為什麼會以28001,28005.28008的順序讀出,這些隱藏的都加上就完美了
無題 @2012-03-17 18:05:55 陳宣
狠狠地學習了一下 謝謝分享
無題 @2011-12-30 09:08:45
在c中,如何把陣列裡的內容當檔名
無題 @2011-10-19 00:55:24
學電腦 都要買什麼教材啊
給樓主找個錯 @2011-08-14 16:49:05 sky
#include
main()
printf("input a string:\n");
ch=getchar();
while (ch!='\n')
rewind(fp);
ch=fgetc(fp);
while(ch!=eof)
printf("\n");
fclose(fp);
} *************************************
file *fp=fopen("c:\\abc\\a.txt","w");/*開啟c:\abc\資料夾中的a.txt檔案以便寫入資訊,如果檔案不存在,就在該位置新建這個檔案*
C語言中對檔案的操作
在c語言中對檔案的操作是通過file結構體來完成的。讀檔案 1 讀取檔案 fread 2 memset 用指定的字元來設定一塊buffer.可避免字串找不到結尾,也可避免增加不必要的字串長度 3 得到檔案的長度 ftell 它是得到檔案指標當前的位置,因為檔案指標隨檔案移動,所以指標當前位置就是檔案...
R 語言中對檔案的操作
由於最近在處理一些真實資料時涉及到巢狀的.tar.gz檔案的解壓,手動乙個乙個解壓過於麻煩。可以使用 shell 指令碼或者 bat 指令碼來做,但想嘗試使用 r 語言對其進行完全解壓,這裡就需要涉及到對檔案與資料夾的一些操作。網上已經有許多現有教程,這裡參考了很多網上的 不過會嘗試盡量寫得更加詳細...
c語言對檔案的操作
檔案使用方式 含義 r 唯讀 開啟乙個文字檔案,只允許讀資料 w 只寫 開啟或建立乙個文字檔案,只允許寫資料 a 追加 開啟乙個文字檔案,並在檔案末尾寫資料 rb 唯讀 開啟乙個二進位制檔案,只允許讀資料 wb 只寫 開啟或建立乙個二進位制檔案,只允許寫資料 ab 追加 開啟乙個二進位制檔案,並在檔...