C語言檔案讀寫

2021-10-12 18:43:38 字數 4500 閱讀 5985

fopen()函式用來開啟乙個檔案,它的格式為:

file *

fopen

(char

*filename,

char

*type)

;

filename為檔名(包括檔案路徑),type為開啟方式,它們都是字串。fopen() 會獲取檔案資訊,包括檔名、檔案狀態、當前讀寫位置等,並將這些資訊儲存到乙個file型別的結構體變數中,然後將該變數的位址返回。如果接收 fopen() 的返回值,就需要定義乙個 file 型別的指標。例如:

file *fp =

("demo.txt"

,"r"

);

開啟方式(type)如**所示:
型別

詳解「r」(唯讀)

為輸入開啟乙個文字檔案

「w」(只寫)

為輸出開啟乙個文字檔案

「a」(追加)

為追加開啟乙個文字檔案

「rb」(唯讀)

為輸入開啟乙個二進位制檔案

「wb」(只寫)

為輸出開啟乙個二進位制檔案

「ab」(追加)

為追加開啟乙個二進位制檔案

「r+」(讀寫)

為讀/寫開啟乙個文字檔案

「w+」(讀寫)

為讀/寫建立乙個文字檔案

「a+」(讀寫)

為讀/寫開啟乙個文字檔案

「rb+」(讀寫)

為讀/寫開啟乙個二進位制檔案

「 wb+」(讀寫)

為讀/寫建立乙個二進位制檔案

「ab+」(讀寫)

為讀/寫開啟乙個二進位制檔案

在開啟乙個檔案時,如果出錯,fopen將返回乙個空指標值null。

**如下(示例):

file *fp =

null;if

(fp =

fopen

("d:\\test.txt"

,"rb")==

null

)//判斷開啟的檔案是否為空,如果為空,則提示錯誤

**如下(示例):

if

(fclose

(fp)==0

)//檔案關閉,如果成功則返回值為0,返回值為非0表示關閉錯誤

else

二進位制是按照二進位制編碼方式存放在檔案中的,雖然可以在螢幕上顯示,但是不能讀懂,文字檔案是asc碼,可以在螢幕上按字元顯示。

以字元形式讀寫檔案時,每次可以從檔案中讀取乙個字元,或者向檔案中寫入乙個字元。主要使用兩個函式:fgetc()和fputc()。fgetc 是 file get char 的縮寫,意思是從指定的檔案中讀取乙個字元。它的原型為:

int fgetc (file *fp)

;//fp 為檔案指標。

fgetc() 讀取成功時返回讀取到的字元,讀取到檔案末尾或讀取失敗時返回eof。eof 是 end of file 的縮寫,表示檔案末尾,是在 stdio.h 中定義的巨集,它的值是乙個負數,往往是 -1。eof 不絕對是 -1,也可以是其他負數,這要看編譯器的實現。

**如下(示例):

char ch;

while

((ch=

fgetc

(fp))!=

eof)

//每次讀取乙個位元組,直到讀取完畢

putchar

(ch)

;//輸出字元ch的值

fputc

('a'

, fp)

;//想文字中輸入字元a

eof 本來表示檔案末尾,意味著讀取結束,但是很多函式在讀取出錯時也返回 eof,那麼當返回eof時,到底是檔案讀取完畢了還是讀取出錯了?我們可以借助 stdio.h 中的兩個函式來判斷,分別是 feof() 和 ferror()。

// feof() 函式用來判斷檔案內部指標是否指向了檔案末尾,它的原型是:

int feof ( file * fp )

;//當指向檔案末尾時返回非零值,否則返回零值。

// ferror() 函式用來判斷檔案操作是否出錯,它的原型是:

int ferror ( file *fp )

;//出錯時返回非零值,否則返回零值。

fgets() 函式用來從指定的檔案中讀取乙個字串,並儲存到字元陣列中,它的原型為:

char

*fgets (

char

*str,

int n, file *fp )

;//str 為字元陣列,n 為要讀取的字元數目,fp 為檔案指標。

返回值:讀取成功時返回字元陣列首位址,也即 str;讀取失敗時返回 null;如果開始讀取時檔案內部指標已經指向了檔案末尾,那麼將讀取不到任何字元,也返回 null。讀取到的字串會在末尾自動新增 『\0』,n 個字元也包括 『\0』。也就是說,實際只讀取到了 n-1 個字元,如果希望讀取 100 個字元,n 的值應該為 101。

**如下(示例):

)//判斷開啟的檔案是否為空if(

)//判斷開啟的檔案是否為空

char buf[n]

;//定義乙個buf,作為快取區

int len =0;

//讀取的長度

while

((len =

fread

(buf,

sizeof

(char

),n,rfp))!=

0)fclose

(wfp)

;fclose

(rfp)

;

fseek

(fp,0,

seek_end);

//seek_end檔案末尾,0偏移量.

fseek

(fp,0,

seek_set);

//seek_end檔案頭,0偏移量.

long filesize =

ftell

(fp)

;//返回當前的檔案指標,相對於檔案開頭的位移量.

int ret =

fprintf

(fp,

"%s"

,"測試");

//將檔案格式化方式寫入到檔案中,成功返回字串長度,錯誤返回負數.

int ret =

feof

(fp)

;//判斷是否到檔案尾部,如果是返回乙個正數,不是返回0.

int ret =

fflush

(fp)

;//重新整理檔案快取區,如果返回0,則表示成功,eof表示失敗,錯誤在error中.

rewind

(fp)

;//設定檔案流位置為開頭,和fseek()一樣.

long

intftell

(file *stream);返回檔案當前的位置

通過字串++和減減實現字元的加密和解密

void

encrypt

(char

*s)//檔案加密

}void

disencrypt

(char

*s)//檔案解密

}

remove

("e:\\study\\program\\qt\\file\\a.txt");

//刪除檔案a.txt

rename

("e:\\study\\program\\qt\\file\\b.txt"

,"e:\\study\\program\\qt\\file\\a.txt");

//重新命名b.txt為a.txt

1、讀取檔案文字和寫入檔案文字應該分開封裝,如果檔案開啟後,寫入檔案,然後在讀取檔案,很容易出現問題(如果寫入檔案長度為4,但是讀取長度為8,則檔案後面會追加4個空格)。 2、在windows下,文字檔案開啟檔案\n換行,會自動在前面加入\r,但是二進位制開啟不會。 3、在使用fread讀取檔案,並且顯示時,一次讀取的大小要小於buf的定義的大小,不然,會出現越界,不能自動追加'\0'結尾,但是如果是檔案複製,則可以。

C語言檔案讀寫

include include define maxlen 1024 int main file outfile,infile outfile fopen 1.bmp wb infile fopen c 1.bmp rb unsigned char buf maxlen int rc while r...

C語言讀寫檔案

c語言庫函式包括檔案的開啟 關閉 讀 寫 定位等各種操作 要操作檔案,首先要宣告乙個檔案指標變數file fp 呼叫fopen開啟檔案 檔案指標名 fopen 檔名,使用檔案方式 ps 這裡檔案路徑必須是帶雙斜槓 其中,1.檔案使用方式 意 義 rt 唯讀開啟乙個文字檔案,只允許讀資料 wt 只寫開...

C語言檔案讀寫

讀取乙個完整的檔案 include include int main 如果檔案錯誤,退出1 獲得檔案大小 fseek pfile 0 seek end 指標移到檔案末位 lsize ftell pfile 獲得檔案長度 rewind pfile 函式rewind 把檔案指標移到由stream 流 指...