BIN文件、二進制文件、嵌入式、我們常用的Firmware通常以BIN文件或HEX文件格式存儲,因此對BIN文件的讀寫操作仍然很常見。在這里,我將記錄我經(jīng)常使用的BIN文件操作。
首先,C# Winform具有Binary文件(BIN文件)的默認操作類。如下所示
filestream file _ path=new filestream(文件名、FileMode、file access);
//binary reader bin _ read=new binary reader(file _ path);
binary writerbin _ write=new binary writer(file _ path);如果要讀取BIN文件(如上所示),請定義自己的BinaryReader如果要寫入BIN文件,請定義BInaryWriter。讀寫的基本操作包括:
讀取BIN文件的操作為bin_read .ReadByte():返回讀取的Byte值。bin _ read . read bytes(count);返回值是count數(shù)的Byte數(shù)組。有多種返回格式、int、char等。這里不一一詳細說明。
寫入BIN文件的操作為:bin_wri(value)。其中,value是要寫入的值,value可以采用byte、int或char等格式。Bin _ wri (byte [] buffer,int index,int count);此方法的含義是將buffer數(shù)組的某些值(buffer數(shù)組的起始索引為index,長度為count)分配給BIN文件的當前位置。
例如,我要寫B(tài)IN文件,0到255,256個byte。
Using System
Using Sy
Using Sy
Using Sy
Using Sy
Using Sy
Using Sy
Using Sy
Using Sy
Using Sy
Namespace測試
{
public partial classform 1 3360 form
{
Public Form1()
{
initialize component();
}
Private void button1 _ click(對象服務器、事件e)
{
save file dialog save _ file=new save file dialog();
='BIN文件|*。bin ';
If ()==DialogRe)
{
filestream file _ path=new filestream、filemode.openorcreate、fileacce);
binary writerbin _ write=new binary writer(file _ path);//BIN創(chuàng)建文件流
byte[]init _ byte=new byte[256];
for(int temp=0;Temp 256Temp)
{
init _ byte[temp]=(byte)temp;
}
Bin_wri(init_byte,0和256);將內(nèi)容寫入//BIN文件
bin _ wri();
bin _ wri();
();
}
}
}
}文件運行結果如下:
那么寫操作完成了。替換工作該怎么辦?實際上,如果要將HEX文件轉換為BIN文件,替換功能很有用。例如,要更改其中的一些數(shù)字,請參閱代碼。
Using System
Using Sy
Using Sy
Using Sy
Using Sy
Using Sy
Using Sy
Using Sy
Using Sy
Using Sy
Namespace測試
{
public partial classform 1 3360 form
{
Public Form1()
{
initialize component();
} private void button1_Click(object sender, EventArgs e) { SaveFileDialog save_file = new SaveFileDialog(); = "BIN文件|*.bin"; if () == DialogRe)//打開文件對話框 { FileStream file_path = new FileStream, FileMode.OpenOrCreate,FileAcce); BinaryWriter bin_write = new BinaryWriter(file_path);//創(chuàng)建BIN文件流 byte[] init_byte = new byte[256]; for (int temp = 0; temp < 256; temp++) { init_byte[temp] = (byte)temp; } bin_wri(init_byte, 0, 256);//初始化BIN文件 Con); //看一下目前文件大小 bin_wri(255, SeekOrigin.Begin);//修改BIN文件當前位置至第255個字節(jié) bin_wri(0x08); //第255個字節(jié)改為08 bin_wri(8, SeekOrigin.Begin);//修改BIN文件當前位置至第8個字節(jié) bin_wri((byte)0x01);//第8個字節(jié)改為01 bin_wri((byte)0x02);//第9個字節(jié)改為02 bin_wri((byte)(0x90));//第10個字節(jié)改為90 byte[] buffer = new byte[8]; for (int temp = 0; temp < 8; temp++) { buffer[temp] = (byte)(temp + 1); } bin_wri(128, SeekOrigin.Begin);//修改BIN文件當前位置至第128個字節(jié) bin_wri(buffer, 2, 5);//將Buffer字節(jié)數(shù)組中的第2到到第7個數(shù)賦值到BIN文件的第128到133個字節(jié) bin_wri((byte)(0x90));//第134個字節(jié)改為08 Con);//看一下目前的文件大小 (256);//文件大小已經(jīng)超過256,只保留256個字節(jié) Con);//看一下目前的文件大小 bin_wri();//釋放文件資源 bin_wri(); (); } } } }上述代碼的運行結果為:
可以看到,BIN文件相應的位置已經(jīng)更改完成,并且其他位置也沒有出現(xiàn)變動。
這里我需要提一下,在做替換過程中,BIN文件的大小是會發(fā)生變化的,因此我用Con)來監(jiān)控文件的大小變化??刂婆_輸出的結果為:
256,259,256
因此,我在代碼的最后將文件的長度強行設置為256.這個不用擔心數(shù)據(jù),實際測試下來,如果沒有(256)語句,那么結果如下:
可以看到后面幾個數(shù)據(jù)是無效的數(shù)據(jù),這個可以直接去掉。
以上是我平時比較常用的BIN文件操作。當然,BIN文件的某一位的刪除和插入,我還沒有比較容易的辦法,不過BIN文件的刪除或者插入特定字符用的場景非常少,因此沒有過多的研究。希望以上內(nèi)容對大家有所幫助。
1.《【長虹bin數(shù)據(jù)怎么寫入】學習C#短文-操作BIN文件(讀、寫、替換)》援引自互聯(lián)網(wǎng),旨在傳遞更多網(wǎng)絡信息知識,僅代表作者本人觀點,與本網(wǎng)站無關,侵刪請聯(lián)系頁腳下方聯(lián)系方式。
2.《【長虹bin數(shù)據(jù)怎么寫入】學習C#短文-操作BIN文件(讀、寫、替換)》僅供讀者參考,本網(wǎng)站未對該內(nèi)容進行證實,對其原創(chuàng)性、真實性、完整性、及時性不作任何保證。
3.文章轉載時請保留本站內(nèi)容來源地址,http://f99ss.com/why/3089445.html