C函數篇(fopen函數)

來源:互聯網
上載者:User

標籤:style   http   io   ar   color   os   使用   sp   for   

函數原型:FILE * fopen(const char * path,const char * mode);相關函數:open,fclose,fopen_s,_wfopen傳回值:檔案順利開啟後,指向該流的檔案指標就會被返回。如果檔案開啟失敗則返回NULL,並把錯誤碼存在errno 中。 函數簡介 函數原型:FILE * fopen(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表示以文字模式開啟檔案。由fopen()所建立的新檔案會具有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”標識。②讀寫的方式,有以下幾種:唯讀、唯寫、讀寫、追加唯寫、追加讀寫這幾種方式。③對檔案是否必須存在、以及存在時是清空還是追加會有不同的響應。具體判斷如。程式樣本 樣本一  #include<stdio.h>  #defineF_PATH"d:\\myfile\\file.dat" intmain( void ) { FILE *fp=NULL; //需要注意 fp= fopen (F_PATH, "r" ); if (NULL==fp) { return -1; //要返回錯誤碼 } fclose (fp); fp=NULL; //需要指向空,否則會指向原開啟檔案地址 return0; }  樣本二  #include<stdio.h> #include<stdlib.h>//為了使用exit() intmain() { charch; FILE *fp=NULL; charfname[50]; //用於存放檔案名稱 printf ( "輸入檔案名稱:" ); scanf ( "%s" ,fname); fp= fopen (fname, "r" ); //只供讀取 if (fp==NULL) //如果失敗了 { printf ( "錯誤!" ); exit (1); //中止程式 } while ((ch= getc (fp))!=EOF) putchar (ch); fclose (fp); //關閉檔案 return0; }  樣本三  #include<stdio.h>  FILE *stream,*stream2;  intmain( void ) { intnumclosed; //Openforread(willfailiffile"crt_fopen.c"doesnotexist) if ((stream= fopen ( "crt_fopen.c" , "r" ))==NULL) //C4996 //Note:fopenisdeprecated;considerusingfopen_sinstead printf ( "Thefile‘crt_fopen.c‘wasnotopened\n" ); else printf ( "Thefile‘crt_fopen.c‘wasopened\n" ); //Openforwrite if ((stream2= fopen ( "data2" , "w+" ))==NULL) //C4996 printf ( "Thefile‘data2‘wasnotopened\n" ); else printf ( "Thefile‘data2‘wasopened\n" ); //ClosestreamifitisnotNULL if (stream) { if ( fclose (stream)) { printf ( "Thefile‘crt_fopen.c‘wasnotclosed\n" ); } } //Allotherfilesareclosed: numclosed=_fcloseall(); printf ( "Numberoffilesclosedby_fcloseall:%u\n" ,numclosed); } 

C函數篇(fopen函數)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.