C 檔案讀寫

2021-08-29 07:19:44 字數 3866 閱讀 3579

file *

fopen

(const

char

* filename,

const

char

* mode )

; 開啟或者建立檔案

intfclose

( file *fp )

;//關閉檔案:

intfputc

(int c, file *fp )

;//將字元寫入到流中:

intfputs

(const

char

*s, file *fp )

;//將字串寫入到流中:

intfprintf

(file *stream,

const

char

*format,..

.);//將格式化的字串輸出到流 stream 中:

注意事項:

定義檔案指標時,要將檔案指標指向空;如file *fp = null;如果fopen成功,則必須有fclose。否則會造成檔案所占用記憶體洩漏和在下次訪問檔案時出現問題。

fclose之後,最好是將檔案指標fp 置為null,否則檔案流雖然關閉,但是檔案指標指向的位址仍然是檔案的位址。即野指標。

乙個檔案,無論它是文字檔案還是二進位制檔案,都是代表了一系列的位元組。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,..

.)

函式fprintf把乙個格式化的字串寫入到流中。如果成功,則返回寫入的字元總數,否則返回乙個負數。

嘗試下面的例項:

注意:請確保您有可用的 /tmp 目錄,如果不存在該目錄,則需要在您的計算機上先建立該目錄。

#include

intmain()

當上面的**被編譯和執行時,它會在 /tmp 目錄中建立乙個新的檔案 test.txt,並使用兩個不同的函式寫入兩行。接下來讓我們來讀取這個檔案。

下面是從檔案讀取單個字元的最簡單的函式:

int

fgetc

( file * fp )

;

fgetc() 函式從 fp 所指向的輸入檔案中讀取乙個字元。返回值是讀取的字元,如果發生錯誤則返回 eof。下面的函式允許您從流中讀取乙個字串:

char

*fgets

(char

*buf,

int n, file *fp )

;

函式 fgets() 從 fp 所指向的輸入流中讀取 n - 1 個字元。它會把讀取的字串複製到緩衝區 buf,並在最後追加乙個 null 字元來終止字串。

如果這個函式在讀取最後乙個字元之前就遇到乙個換行符 『\n』 或檔案的末尾 eof,則只會返回讀取到的字元,包括換行符。

int

fscanf

(file *fp,

const

char

*format,..

.)

fscanf函式來從檔案中讀取字串,但是在遇到第乙個空格字元時,它會停止讀取。如果成功,該函式返回成功匹配和賦值的個數。如果到達檔案末尾或發生讀錯誤,則返回 eof。

#include

intmain()

1 : this

2: is testing for fprintf...

3: this is testing for fputs...

首先,fscanf() 方法只讀取了 this,因為它在後邊遇到了乙個空格。其次,呼叫 fgets() 讀取剩餘的部分,直到行尾。最後,呼叫 fgets() 完整地讀取第二行。

二進位制 i/o 函式

下面兩個函式用於二進位制輸入和輸出:

size_t fread

(void

*ptr, size_t size_of_elements,

size_t number_of_elements, file *a_file)

;

size_t fwrite

(const

void

*ptr, size_t size_of_elements,

size_t number_of_elements, file *a_file)

;

這兩個函式都是用於儲存塊的讀寫 - 通常是陣列或結構體。

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...