fopen函數(shù)用來打開一個文件,其調(diào)用的一般形式為:
10年積累的成都做網(wǎng)站、成都網(wǎng)站設(shè)計經(jīng)驗,可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先網(wǎng)站設(shè)計后付款的網(wǎng)站建設(shè)流程,更有奇臺免費網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
文件指針名=fopen(文件名,使用文件方式);
其中,
“文件指針名”必須是被說明為FILE 類型的指針變量;
“文件名”是被打開文件的文件名;
“使用文件方式”是指文件的類型和操作要求。
“文件名”是字符串常量或字符串?dāng)?shù)組。
例如:
FILE *fp;
fp=("file a","r");
其意義是在當(dāng)前目錄下打開文件file a,只允許進(jìn)行“讀”操作,并使fp指向該文件。
又如:
FILE *fphzk
fphzk=("c:\\hzk16","rb")
其意義是打開C驅(qū)動器磁盤的根目錄下的文件hzk16,這是一個二進(jìn)制文件,只允許按二進(jìn)制方式進(jìn)行讀操作。兩個反斜線“\\ ”中的第一個表示轉(zhuǎn)義字符,第二個表示根目錄。
使用文件的方式共有12種,下面給出了它們的符號和意義。
文件使用方式
意義
“rt”
只讀打開一個文本文件,只允許讀數(shù)據(jù)
“wt”
只寫打開或建立一個文本文件,只允許寫數(shù)據(jù)
“at”
追加打開一個文本文件,并在文件末尾寫數(shù)據(jù)
“rb”
只讀打開一個二進(jìn)制文件,只允許讀數(shù)據(jù)
“wb”
只寫打開或建立一個二進(jìn)制文件,只允許寫數(shù)據(jù)
“ab”
追加打開一個二進(jìn)制文件,并在文件末尾寫數(shù)據(jù)
“rt+”
讀寫打開一個文本文件,允許讀和寫
“wt+”
讀寫打開或建立一個文本文件,允許讀寫
“at+”
讀寫打開一個文本文件,允許讀,或在文件末追加數(shù)據(jù)
“rb+”
讀寫打開一個二進(jìn)制文件,允許讀和寫
“wb+”
讀寫打開或建立一個二進(jìn)制文件,允許讀和寫
“ab+”
讀寫打開一個二進(jìn)制文件,允許讀,或在文件末追加數(shù)據(jù)
對于文件使用方式有以下幾點說明:
1) 文件使用方式由r,w,a,t,b,+六個字符拼成,各字符的含義是:
r(read): 讀
w(write): 寫
a(append): 追加
t(text): 文本文件,可省略不寫
b(banary): 二進(jìn)制文件
+: 讀和寫
2) 凡用“r”打開一個文件時,該文件必須已經(jīng)存在,且只能從該文件讀出。
3) 用“w”打開的文件只能向該文件寫入。若打開的文件不存在,則以指定的文件名建立該文件,若打開的文件已經(jīng)存在,則將該文件刪去,重建一個新文件。
4) 若要向一個已存在的文件追加新的信息,只能用“a”方式打開文件。但此時該文件必須是存在的,否則將會出錯。
5) 在打開一個文件時,如果出錯,fopen將返回一個空指針值NULL。在程序中可以用這一信息來判別是否完成打開文件的工作,并作相應(yīng)的處理。因此常用以下程序段打開文件:
6) 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!”,下一行g(shù)etch()的功能是從鍵盤輸入一個字符,但不在屏幕上顯示。在這里,該行的作用是等待,只有當(dāng)用戶從鍵盤敲任一鍵時,程序才繼續(xù)執(zhí)行,因此用戶可利用這個等待時間閱讀出錯提示。敲鍵后執(zhí)行exit(1)退出程序。
7) 把一個文本文件讀入內(nèi)存時,要將ASCII碼轉(zhuǎn)換成二進(jìn)制碼,而把文件以文本方式寫入磁盤時,也要把二進(jìn)制碼轉(zhuǎn)換成ASCII碼,因此文本文件的讀寫要花費較多的轉(zhuǎn)換時間。對二進(jìn)制文件的讀寫不存在這種轉(zhuǎn)換。
8) 標(biāo)準(zhǔn)輸入文件(鍵盤),標(biāo)準(zhǔn)輸出文件(顯示器),標(biāo)準(zhǔn)出錯輸出(出錯信息)是由系統(tǒng)打開的,可直接使用。
fopen一般與buf搭配使用,通過與fgets函數(shù)配合使用,將文件中的字符串讀到buf中,這樣達(dá)到讀出文件內(nèi)容的目的代碼如下:
FILE tf=NULL;//定義一個文件指著,用于判斷fopen是否打開成功,并初始化為空;
char buf[1024]={0};//定義一個長度為1024的數(shù)組,用于存放文件的內(nèi)容;
tf=fopen("c:\example.txt","r");//打開c盤指定文件,并以只讀的形式打開,避免破壞原文件,將fopen的返回值放在指針tf中,若打開成功,則返回成功的指針,打開不成功則返回空;
if(tf != NULL)//判斷是否成功,不等于NULL則表示成功;
{
if(fgets(buf,1024,tf) != NULL)//將指向c盤文件的指針的內(nèi)容賦給buf,長度為1024,并判斷是否獲取成功;
{
printf("buf=%s\n",buf);//將成功獲取的字符串顯示在屏幕上;
}
}
fclose(tf);//將已打開的文件關(guān)閉;
擴(kuò)展資料:
fopen的工作原理
FILE *fp;
fp=fopen("filename.txt","w");
首先檢測filename.txt是否存在,如果不存在則在磁盤 創(chuàng)建該文件,然后在內(nèi)存開辟區(qū)域(應(yīng)該是緩沖區(qū))準(zhǔn)備寫該文件
調(diào)用fclose時,將內(nèi)存中的內(nèi)容寫入到磁盤中去
測試(filename.txt不存在):
#include stdio.h
#include stdlib.h
int main()
{
FILE *fp1,*fp2;
fp1=fopen("filename.txt","w");
if(fp1==NULL)
{
printf("fp1 open failed!/n");
}
else
{
printf("fp1 open success!/n");
}
fp2=fopen("filename.txt","r");
if(fp2==NULL)
{
printf("fp2 open failed!/n");
}
else
{
printf("fp2 open success!/n");
}
fclose(fp1);
fclose(fp2);
return 0;
}
輸出:
fp1 open success!
fp2 open success!
說明文件操作不是互斥的,而且以寫方式打開文件,如果文件不存在,先在磁盤創(chuàng)建該文件
加入寫入語句:
#include stdio.h
#include stdlib.h
int main()
{
FILE *fp1,*fp2;
fp1=fopen("filename.txt","w");
if(fp1==NULL)
{
printf("fp1 open failed!/n");
}
else
{
printf("fp1 open success!/n");
fputs("abcdef",fp1);
}
fp2=fopen("filename.txt","w");
if(fp2==NULL)
{
printf("fp2 open failed!/n");
}
else
{
printf("fp2 open success!/n");
fputs("ABC/n",fp2);
}
fclose(fp1);
fclose(fp2);
return 0;
}
打開filename.txt文件:
ABC
f
說明后關(guān)閉的,刷新了磁盤數(shù)據(jù)
參考資料來源:fopen-百度百科
可以調(diào)用 兩次,但語法要正確
if ((fp1=fopen("putin", "ab+"))==NULL || (fp2=fopen("putout", "ab")) == NULL)//
~
你把
fp
=
fopen()
加個括號
變成(
fp
=
fopen()
)
注意優(yōu)先級,==的優(yōu)先級比=號優(yōu)先級高,也就是說,他先==判斷然后=操作,這是的fp
=
1
,所以失敗