然後,就在網上搜尋了一下,發現通過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三個函式的詳細說明。
fopen(開啟檔案)
相關函式
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()
fread(從檔案流讀取資料)
相關函式
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()。
int hight=(buf[0]&0xf0)>>4;
int low=buf[0]&0x0f;
二進位制檔案讀寫
define crt secure no warnings include include include size t fread void buffer,size t size,size t count,file stream size t fwrite const void buffer,si...
C 讀寫二進位制檔案
摘要 使用c 讀寫二進位制檔案,在開發中操作的比較頻繁,今天有幸找到一篇文章,遂進行了一些試驗,並進行了部分的總結。使用c 操作檔案,是研發過程中比較頻繁的,因此進行必要的總結和封裝還是十分有用的。今天在網上找到一篇,遂進行了部分的試驗,以記之,備後用。include 寫二進位制檔案 寫二進位制檔案...
c 讀寫二進位制檔案
最近需要用到二進位制檔案讀寫的相關操作,這邊稍微總結下,首先二進位制檔案的讀寫可以使用fread和fwrite來處理。fread函式原型 size t cdecl fread void size t,size t,file 第乙個引數表示的是快取,第二個引數表示的是基本單元的大小,第三引數表示的是基...