上一章我們講解了 c 語言處理的標準輸入和輸出裝置。本章我們將介紹 c 程式設計師如何建立、開啟、關閉文字檔案或二進位制檔案。
乙個檔案,無論它是文字檔案還是二進位制檔案,都是代表了一系列的位元組。c 語言不僅提供了訪問頂層的函式,也提供了底層(os)呼叫來處理儲存裝置上的檔案。本章將講解檔案管理的重要呼叫。
您可以使用fopen( )函式來建立乙個新的檔案或者開啟乙個已有的檔案,這個呼叫會初始化型別file的乙個物件,型別file包含了所有用來控制流的必要的資訊。下面是這個函式呼叫的原型:
file *fopen( const char * filename, const char * mode );在這裡,filename是字串,用來命名檔案,訪問模式mode的值可以是下列值中的乙個:
模式描述
r開啟乙個已有的文字檔案,允許讀取檔案。
w開啟乙個文字檔案,允許寫入檔案。如果檔案不存在,則會建立乙個新檔案。在這裡,您的程式會從檔案的開頭寫入內容。如果檔案存在,則該會被截斷為零長度,重新寫入。
a開啟乙個文字檔案,以追加模式寫入檔案。如果檔案不存在,則會建立乙個新檔案。在這裡,您的程式會在已有的檔案內容中追加內容。
r+開啟乙個文字檔案,允許讀寫檔案。
w+開啟乙個文字檔案,允許讀寫檔案。如果檔案已存在,則檔案會被截斷為零長度,如果檔案不存在,則會建立乙個新檔案。
a+開啟乙個文字檔案,允許讀寫檔案。如果檔案不存在,則會建立乙個新檔案。讀取會從檔案的開頭開始,寫入則只能是追加模式。
如果處理的是二進位制檔案,則需使用下面的訪問模式來取代上面的訪問模式:
"rb", "wb", "ab", "rb+", "r+b", "wb+", "w+b", "ab+", "a+b"為了關閉檔案,請使用 fclose( ) 函式。函式的原型如下:
int fclose( file *fp );如果成功關閉檔案,fclose( )函式返回零,如果關閉檔案時發生錯誤,函式返回eof。這個函式實際上,會清空緩衝區中的資料,關閉檔案,並釋放用於該檔案的所有記憶體。eof 是乙個定義在標頭檔案stdio.h中的常量。
c 標準庫提供了各種函式來按字元或者以固定長度字串的形式讀寫檔案。
下面是把字元寫入到流中的最簡單的函式:
int fputc( int c, file *fp );函式fputc()把引數 c 的字元值寫入到 fp 所指向的輸出流中。如果寫入成功,它會返回寫入的字元,如果發生錯誤,則會返回eof。您可以使用下面的函式來把乙個以 null 結尾的字串寫入到流中:
int fputs( const char *s, file *fp );函式fputs()把字串s寫入到 fp 所指向的輸出流中。如果寫入成功,它會返回乙個非負值,如果發生錯誤,則會返回eof。您也可以使用int fprintf(file *fp,const char *format, ...)函式來寫把乙個字串寫入到檔案中。嘗試下面的例項:
注意:請確保您有可用的tmp目錄,如果不存在該目錄,則需要在您的計算機上先建立該目錄。#include/tmp 一般是 linux 系統上的臨時目錄,如果你在 windows 系統上執行,則需要修改為本地環境中已存在的目錄,例如: c:\tmp、d:\tmp等。
int main()
fclose(fp);
}執行結束後,開啟 test.txt 檔案:
this is teating for fprintf...注意:只有用 r+ 模式開啟檔案才能插入內容,w 或 w+ 模式都會清空掉原來檔案的內容再來寫,a 或 a+ 模式即總會在檔案最尾新增內容,哪怕用 fseek() 移動了檔案指標位置。
摘自:
c 檔案讀寫 文字讀寫
include int main else return 0 格式 intfscanf file stream,constchar format,返回值 如果成功,該函式返回成功匹配和賦值的個數。如果到達檔案末尾或發生讀錯誤,則返回 eof 引數1 file stream 檔案指標 引數2 cons...
C 檔案讀寫
原文 http www.vckbase.com document viewdoc id 1439 原作 john peregrine file i o using c 序論 我曾發表過檔案輸入輸出的文章,現在覺得有必要再寫一點。檔案 i o 在c 中比烤蛋糕簡單多了。在這篇文章裡,我會詳細解釋asc...
C 讀寫檔案
1 使用filestream讀寫檔案 檔案頭 using system using system.collections.generic using system.text using system.io 讀檔案核心 byte bydata new byte 100 char chardata ne...