工作中碰到乙個問題,如何只修改檔案中間的幾個位元組,而其他的內容不變。這個問題看似簡單,但是很多人估計都不知道怎麼做。我開始seek到檔案的特定的位置,然後寫檔案,但是使用的檔案開啟模式不對,檔案不是被清空,就是被截斷,達不到效果。
在c語言中檔案開啟方式有這麼幾種:
另外還有2個選項,可以與上面的6個選項復合使用,乙個是t表示以文字的方式開啟檔案(預設是t),乙個是b表示以二進位制的方式開啟檔案,t和b是互斥的不能同時使用。當與b組合時,有這麼幾種方式:wb、ab、rb、wb+、ab+、rb+,而a,w,r這幾個選項是不能組合使用的,其中a,w都表示寫檔案,只不過乙個在檔案尾,乙個在檔案開始處,r表示讀檔案。我試過將a,w,r幾個兩兩組合使用,發現下面的現象:
可以看出來當a,w,r在一起組合使用的時候,其後面的選項實際上好像是被忽略了
所以解決文章開頭提出來的問題,應該使用 rb+ 的方式開啟檔案,這種方式開啟的檔案,可讀,可寫,開啟之後寫指標在檔案開始處,可以任意seek,而seek之後寫的內容會覆蓋被寫的內容,其他沒有寫到的內容不會有改變。
//程式測試結果在ubuntu linux下執行獲得#include #include int main()
; fseek(file,4,seek_set);
fwrite(buffer,1,sizeof(buffer),file);
fclose(file);
} return 0;
}
c語言中如何修改檔案中間的幾個位元組
fopen的開啟模式 在c語言中檔案開啟方式有這麼幾種 r 以唯讀方式開啟檔案,只能讀不能寫,往檔案中寫是沒有任何效果的 r 可以讀,也可以寫,檔案開啟的時候,指向檔案開頭,可以通過seek改變讀寫位置 w 這種方式開啟的檔案控制代碼,只能寫,如果檔案存在則將長度清零,否則新建檔案,這種控制代碼通過...
double佔幾個位元組
16位編譯器 char 1個位元組 char 即指標變數 2個位元組 short int 2個位元組 int 2個位元組 unsigned int 2個位元組 float 4個位元組 double 8個位元組 long 4個位元組 long long 8個位元組 unsigned long 4個位元...
int佔幾個位元組
int型變數有時候佔4個位元組 在win32 有時候佔2個位元組 在dos 這個int型別的大小到底是跟編譯器有關,還是跟cpu有關,還是跟作業系統有關?所謂的16位32位64位系統是由cpu決定的,由機器指令的定址 暫存器位數決定的 os受cpu的限制,但在32位的cpu下16位的os也可以跑 就...