C函數篇(fopen函數)

函數原型:FILE * f open(const char * path,const char * mode);
相關函數: openfclosefopen_s,_wfopen
返回值: 文件順利打開後,指向該流的 文件指針就會被返回。若是 文件打開失敗則返回 NULL,並把 錯誤代碼存在errno 中。

程序示例

示例一
 1 #include<stdio.h>
 2  
 3 #defineF_PATH"d:\\myfile\\file.dat"
 4 intmain(void)
 5 {
 6 FILE*fp=NULL;//須要注意
 7 fp=fopen(F_PATH,"r");
 8 if(NULL==fp)
 9 {
10 return-1;//要返回錯誤代碼
11 }
12 fclose(fp);
13 fp=NULL;//須要指向空,不然會指向原打開文件地址
14 return0;
15 }
示例一

示例二
 1 #include<stdio.h>
 2 #include<stdlib.h>//爲了使用exit()
 3 intmain()
 4 {
 5 charch;
 6 FILE*fp=NULL;
 7 charfname[50];//用於存放文件名
 8 printf("輸入文件名:");
 9 scanf("%s",fname);
10 fp=fopen(fname,"r");//只供讀取
11 if(fp==NULL)//若是失敗了
12 {
13 printf("錯誤!");
14 exit(1);//停止程序
15 }
16 while((ch=getc(fp))!=EOF)
17 putchar(ch);
18 fclose(fp);//關閉文件
19 return0;
20 }
示例二

示例三
 1 #include<stdio.h>
 2  
 3 FILE*stream,*stream2;
 4  
 5 intmain(void)
 6 {
 7 intnumclosed;
 8 //Openforread(willfailiffile"crt_fopen.c"doesnotexist)
 9 if((stream=fopen("crt_fopen.c","r"))==NULL)//C4996
10 //Note:fopenisdeprecated;considerusingfopen_sinstead
11 printf("Thefile'crt_fopen.c'wasnotopened\n");
12 else
13 printf("Thefile'crt_fopen.c'wasopened\n");
14 //Openforwrite
15 if((stream2=fopen("data2","w+"))==NULL)//C4996
16 printf("Thefile'data2'wasnotopened\n");
17 else
18 printf("Thefile'data2'wasopened\n");
19 //ClosestreamifitisnotNULL
20 if(stream)
21 {
22 if(fclose(stream))
23 {
24 printf("Thefile'crt_fopen.c'wasnotclosed\n");
25 }
26 }
27 //Allotherfilesareclosed:
28 numclosed=_fcloseall();
29 printf("Numberoffilesclosedby_fcloseall:%u\n",numclosed);
30 }
示例三

 

函數簡介

函數原型:FILE * f open(const char * path,const char * mode);
 
返回值: 文件順利打開後,指向該流的 文件指針就會被返回。若是 文件打開失敗則返回NULL,並把 錯誤代碼存在 errno 中。
通常而言,打開 文件後會作一些文件讀取或寫入的動做,若打開文件失敗,接下來的讀寫動做也沒法順利進行,因此通常在 fopen()後做錯誤判斷及處理。
 
參數說明:
參數path 字符串包含欲打開的 文件路徑及文件名,參數mode字符串則表明着流 形態
mode有下列幾種形態 字符串:
r 以 只讀方式打開 文件,該文件必須存在。
r+ 以可讀寫方式打開 文件,該文件必須存在。
rb+ 讀寫打開一個 二進制文件,容許讀寫 數據,文件必須存在。
rw+ 讀寫打開一個文本 文件,容許讀和寫。
w 打開只寫 文件,若文件存在則文件長度清爲0,即該文件內容會消失。若 文件不存在則創建該文件。
w+ 打開可讀寫 文件,若文件存在則文件長度清爲零,即該文件內容會消失。若 文件不存在則創建該文件。
a 以附加的 方式打開只寫 文件。若 文件不存在,則會創建該文件,若是文件存在,寫入的數據會被加到文件尾,即文件原先的內容會被保留。( EOF符保留)
a+ 以附加方式打開可讀寫的 文件。若 文件不存在,則會創建該文件,若是文件存在,寫入的數據會被加到文件尾後,即文件原先的內容會被保留。 (原來的EOF符不保留)
wb 只寫打開或新建一個 二進制文件;只容許寫數據。
wb+ 讀寫打開或創建一個 二進制文件,容許讀和寫。
ab+ 讀寫打開一個 二進制文件,容許讀或在文件末追加數據。
at+ 打開一個叫 string的文件,a表示 append,就是說寫入處理的時候是接着原來文件已有內容寫入,不是從頭寫入覆蓋掉,t表示打開文件的類型是文本文件,+號表示對文件既能夠讀也能夠寫。
上述的形態字符串均可以再加一個b字符,如rb、w+b或ab+等組合,加入b 字符用來告訴函數庫以二進制模式打開文件。若是不加b,表示默認加了t,即rt,wt,其中t表示以 文本模式打開文件。由f open()所創建的新 文件會具備S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH(0666)權限,此文件權限也會參考 umask值。
有些C 編譯系統可能不徹底提供全部這些功能,有的C 版本不用"r+","w+","a+",而用"rw","wr","ar"等,讀者注意所用系統的規定。
 
二進制 和文本模式的區別
1.在 windows系統中,文本模式下,文件以"\r\n"表明換行。若以文本模式打開文件,並用fputs等函數寫入換行符"\n"時,函數會自動在"\n"前面加上"\r"。即實際寫入文件的是"\r\n" 。
2.在類Unix/Linux系統中文本模式下,文件以"\n"表明換行。因此Linux系統中在文本模式和二進制模式下並沒有區別。
 
打開方式總結:各類打開方式主要有三個方面的區別:
①打開是否爲二進制文件,用「b」標識。
②讀寫的方式,有如下幾種:只讀、只寫、讀寫、追加只寫、追加讀寫這幾種方式。
③對文件是否必須存在、以及存在時是清空仍是追加會有不一樣的響應。具體判斷以下圖。
相關文章
相關標籤/搜索