C語言實現二進位制檔案讀寫

2021-04-01 23:25:58 字數 2941 閱讀 1998

c

語言實現二進位制檔案讀寫

我一直覺得二進位制檔案讀寫是個很容易的事,所以一直沒在意,最近在寫乙個

然後,就在網上搜尋了一下,發現通過

c語言實現二進位制檔案讀寫的資料居然出奇的少,這讓我很憤怒,因為雖然這東西很簡單,但是對於初學者,往往會需要花很長的時間去弄,一旦明白,又發現花的時間很不值得,罷了,這裡通過乙個檔案拷貝的例子來講講二進位制檔案的讀寫吧。

先介紹函式,我們一共要用到三個函式,

fopen

,fread

,fwrite

。二進位制讀寫的順序是用

fopen

以二進位制方式開啟讀寫檔案,然後使用

fread

和fwrite

兩個函式將資料寫入二進位制檔案中。下面我們看看乙個拷貝程式的原始碼:

copy.c:

#include

#include

#define maxlen 1024

int main(int argc, char *argv)

file * outfile, *infile;

outfile = fopen(argv[2], "wb" );

infile = fopen(argv[1], "rb");

unsigned char buf[maxlen];

if( outfile == null || infile == null )

int rc;

while( (rc = fread(buf,sizeof(unsigned char), maxlen,infile)) != 0 )

fclose(infile);

fclose(outfile);

system("pause");

return 0;

}現在來講講這個程式,這個程式的作用就是將檔案

1的內容直接拷貝到檔案

2中,注意

fread

的返回值,這個值需要在

fwrite

的時候將會用到。

後面是關於

fopen

,fread

,fwrite

三個函式的詳細說明。

相關函式

open

,fclose

表頭檔案

#include

定義函式

file * fopen(const char * path,const char * mode);

函式說明

引數path

字串包含欲開啟的檔案路徑及檔名,引數

mode

字串則代表著流形態。

mode

有下列幾種形態字串:r

開啟唯讀檔案,該檔案必須存在。

r+ 開啟可讀寫的檔案,該檔案必須存在。

w 開啟只寫檔案,若檔案存在則檔案長度清為

0,即該檔案內容會消失。若檔案不存在則建立該檔案。

w+ 開啟可讀寫檔案,若檔案存在則檔案長度清為零,即該檔案內容會消失。若檔案不存在則建立該檔案。

a 以附加的方式開啟只寫檔案。若檔案不存在,則會建立該檔案,如果檔案存在,寫入的資料會被加到檔案尾,即檔案原先的內容會被保留。

a+ 以附加方式開啟可讀寫的檔案。若檔案不存在,則會建立該檔案,如果檔案存在,寫入的資料會被加到檔案尾後,即檔案原先的內容會被保留。

上述的形態字串都可以再加乙個

b字元,如rb、

w+b或

ab+等組合,加入

b 字元用來告訴函式庫開啟的檔案為二進位制檔案,而非純文字檔案。不過在

posix

系統,包含

linux

都會忽略該字元。由

fopen()

所建立的新檔案會具有

s_irusr|s_iwusr|s_irgrp|s_iwgrp|s_iroth|s_iwoth(0666)

許可權,此檔案許可權也會參考

umask

值。返回值

檔案順利開啟後,指向該流的檔案指標就會被返回。若果檔案開啟失敗則返回

null

,並把錯誤**存在

errno

中。附加說明

一般而言,開檔案後會作一些檔案讀取或寫入的動作,若開檔案失敗,接下來的讀寫動作也無法順利進行,所以在

fopen()

後請作錯誤判斷及處理。

範例#include

main()

相關函式

fopen

,fwrite

,fseek

,fscanf

表頭檔案

#include

定義函式

size_t fread(void * ptr,size_t size,size_t nmemb,file * stream);

函式說明

fread()

用來從檔案流中讀取資料。引數

stream

為已開啟的檔案指標,引數

ptr

指向欲存放讀取進來的資料空間,讀取的字元數以引數

size*nmemb

來決定。

fread()

會返回實際讀取到的

nmemb

數目,如果此值比引數

nmemb

來得小,則代表可能讀到了檔案尾或有錯誤發生,這時必須用

feof()

或ferror()

來決定發生什麼情況。

返回值返回實際讀取到的

nmemb

數目。附加說明

範例#include

#define nmemb 3

struct test

s[nmemb];

main()

#define nmemb 3

struct test

s[nmemb];

main()

執行參考

fread

()。

C語言實現二進位制檔案讀寫

然後,就在網上搜尋了一下,發現通過c語言實現二進位制檔案讀寫的資料居然出奇的少,這讓我很憤怒,因為雖然這東西很簡單,但是對於初學者,往往會需要花很長的時間去弄,一旦明白,又發現花的時間很不值得,罷了,這裡通過乙個檔案拷貝的例子來講講二進位制檔案的讀寫吧。先介紹函式,我們一共要用到三個函式,fopen...

C語言實現二進位制檔案讀寫

然後,就在網上搜尋了一下,發現通過c語言實現二進位制檔案讀寫的資料居然出奇的少,這讓我很憤怒,因為雖然這東西很簡單,但是對於初學者,往往會需要花很長的時間去弄,一旦明白,又發現花的時間很不值得,罷了,這裡通過乙個檔案拷貝的例子來講講二進位制檔案的讀寫吧。先介紹函式,我們一共要用到三個函式,fopen...

c語言讀寫二進位制檔案

1,寫二進位制檔案 file f out null 宣告檔案控制代碼 f out fopen c wb 開啟檔案控制代碼 if f out null return fwrite dataarray,sizeof unsigned char count,f out 寫資料,引數 源資料,塊大小,資料長...