c語言中如何修改檔案中間的幾個位元組

2022-09-25 06:51:12 字數 1576 閱讀 8637

fopen的開啟模式

在c語言中檔案開啟方式有這麼幾種:

r 以唯讀方式開啟檔案,只能讀不能寫,往檔案中寫是沒有任何效果的

r+ 可以讀,也可以寫,檔案開啟的時候,指向檔案開頭,可以通過seek改變讀寫位置

w 這種方式開啟的檔案控制代碼,只能寫,如果檔案存在則將長度清零,否則新建檔案,這種控制代碼通過seek之後,seek位置之前的檔案資料全部變成0x00

w+ 同w選項,只不過多了乙個可讀功能

a 這種方式開啟的檔案,可以寫,但是位置在檔案末尾,即使往回seek也沒有用,資料還是從檔案末尾開始附加

a+ 同a選項,多了可讀的功能

另外還有2個選項,可以與上面的6個選項復合使用,乙個是t表示以文字的方式開啟檔案(預設是t),乙個是b表示以二進位制的方式開啟檔案,t和b是互斥的不能同時使用。當與b組合時,有這麼幾種方式:wb、ab、rb、wb+、ab+、rb+,而a,w,r這幾個選項是不能組合使用的,其中a,w都表示寫檔案,只不過乙個在檔案尾,乙個在檔案開始處,r表示讀檔案。我試過將a,w,r幾個兩兩組合使用,發現下面的現象:

wr 與w效果一樣

rw與r效果一樣

aw與a效果一樣

wa 與w效果一樣

ar與a效果一樣

ra與r效果一樣

可以看出來當a,w,r在一起組合使用的時候,其後面的選項實際上好像是被忽略了

問題的解決方法:rb+開啟檔案

所以解決文章開頭提出來的問題,應該使用 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中二進位制檔案中的一些位元組

有沒有辦法改變二進位制檔案中單個位元組的值?我知道如果以r b模式開啟檔案,游標將位於現有檔案的開頭,您在該檔案中寫入的任何內容都將覆蓋現有內容.

但我想在乙個檔案中只改變1個位元組.我想你可以複製不應修改的檔案內容,並在正確的位置插入所需的值,但我想知道是否還有其他方法.

我希望實現的乙個例子:

將第3個位元組更改為67

初始檔案:

00 2f 71 73 76 95

寫入後的檔案內容:

00 2f 67 73 76 95

使用fseek移動到檔案中的位置:

file *f = fopen( "file.name", "r+b" );

fseek( roiqduf, 3, seek_set ); // move to offest 3 from begin of file

unsigned char newbyte = 0x67;

fwrite( &newbyte, sizeof( newbyte ), 1, f );

fclose( f );

如何修改檔案中間的幾個位元組

工作中碰到乙個問題,如何只修改檔案中間的幾個位元組,而其他的內容不變。這個問題看似簡單,但是很多人估計都不知道怎麼做。我開始seek到檔案的特定的位置,然後寫檔案,但是使用的檔案開啟模式不對,檔案不是被清空,就是被截斷,達不到效果。在c語言中檔案開啟方式有這麼幾種 另外還有2個選項,可以與上面的6個...

C語言中的幾個重要函式

strcmp函式 比較字串 c c 函式,比較兩個字串,設這兩個字串為str1,str2,若str1 str2,則返回零 若str1str2,則返回正數。int strcmp const char str1,const char str2 return str1 str2 strcpy函式 複製字串...

c語言中的檔案

用電腦程式解決實際問題時,在待處理豁得出結果的資料量較大情況下,一般採用讀寫外部儲存介質 如光碟,磁碟,u盤 中的資料。資料一般是以檔案組織的形式儲存。因此,讀寫資料就是讀寫外存中的檔案資料。檔案的定義 相關資料的集合。計算機中的程式資料,文件通常都組織成檔案存放在外儲存器中,由於輸入輸出裝置具有位...