1. 程式人生 > >C檔案基本操作

C檔案基本操作

(1)C中檔案的基本使用方式以及相關說明

檔案使用方式以及意義:

“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。在程式中可以用這一資訊來判別是否完成開啟檔案的工作,並作相應的處理。

(2)檔案重定向操作


1)將輸入重定向到標準輸入流,重定向的效果就是標準輸入流從檔案中獲取資料。

/*

該函式的效果就是將標準輸入流重定向到檔案中,從檔案中讀取直到第一個換行符的字元,並在控制檯列印輸出

*/

int input_redirection()

{

char c;

freopen("d:/file.txt","r",stdin);//將標準輸入重定向到檔案

while (scanf("%c",&c)!=EOF)//遇到回車換行的話就會結束輸入

{

printf("%c",c);

}

return 0;

}

2)將標準輸出重新定向到控制檯,效果就是將結果輸出到檔案中去

int output_redirection()

{

char c;

freopen("d:/file.txt","w",stdout);//將輸出重定向到標準輸出流中去

while (i<1000)

{

printf("這是一個測試程式\n");

i++;

}

freopen("CON","w",stdout);//將輸出恢復到標準輸出裝置控制檯上。

fclose(stdout);//關閉標準輸出

return 0;

}

3)利用重定向讀寫檔案

int readwrite_redirection()

{

char c[10000];

freopen("d:/file.txt","r",stdin);     //從in.txt 中讀入資料  

freopen("d:/out.txt","w",stdout);  // 將最後資料寫入out.txt中  

while(scanf("%s",c)!=EOF)     //資料是從in.txt中輸入的  

printf("%s\n",c);             //寫入out.txt中  

fclose(stdin);  

fclose(stdout);  

return 0; 

}

4)區分gets() fgets() fread()函式 

int my_readfile()

{

FILE *stream  =freopen("d:/file.txt","r",stdin);

char s[102400]="";  

if(stream==NULL)  

exit(-1);

while ((gets(s))!=NULL)//gets從標準輸入裝置讀字串函式,其可以無限讀取,不會判斷上限,以回車結束讀取

{

printf("%s\n",s);    // 讀取file.txt中1到1024位,放入s中 ,我是這麼理解的  

}

rewind(stream);

while ((fgets(s,102400,stream))!=NULL)//讀取指定資料的字元 如果讀取失敗則返回為NULL 忽略掉回車

{

printf("%s\n",s);    

}

rewind(stream);

while (fread(s,1,102400,stream)==NULL);//讀取指定書目的字元 如果失敗 返回NULL 成功則返回讀到了位元組書目

{

printf("%s\n",s);

}

return 0;  

}