C#對二進制文件的特定位置進行讀寫小結


雖然網絡上關於“C#對二進制文件進行讀寫”的文章多如牛毛,但具體到自己要處理的問題時,難免讓人產生“書到用時方恨少”和“紙上讀來終覺淺”的感覺。我現在感覺要真正解決自己的問題,最終還是要靠自己下功夫。 

 

實例一:將數值寫入文件的特定位置

    String saveFile = "C:\\Users\\ufo\\Desktop\\rich4\\SAVE2.DAT";// 要保存的文件
    FileStream writeStream = File.OpenWrite(saveFile);// 以寫的方式打開

    int value = 123456;// 要寫入的數值
    String strAll = value.ToString("x8");// 轉成16進制

// 下面是特定處理,個性化需求,不完善勿怪 String strA
= strAll.Substring(strAll.Length - 2, 2); String strB = strAll.Substring(strAll.Length - 4, 2); String strC = strAll.Substring(strAll.Length - 6, 2); byte[] newData = new byte[3]; newData[0] = Convert.ToByte(strA, 16); newData[1] = Convert.ToByte(strB, 16); newData[2] = Convert.ToByte(strC, 16); writeStream.Seek(44, SeekOrigin.Begin);// 定位,在第44個字節處寫入 writeStream.Write(newData, 0, newData.Length);// 將准備好的數組寫入文件。newData是包含要寫入文件的byte類型數組;0是數組中的從零開始的字節偏移量,從此處開始將字節復制到該流;newData.Length是要寫入的字節數。這句話的意思是從44個字節開始把數組內容從頭到尾寫進去,修改下參數如writeStream.Write(newData, 1, newData.Length-1)是把數組從第二個到倒數第一個寫進去
    writeStream.Close();// 關閉文件

 

實例二:讀取文件的特定位置,得到數值

    String openFile = "C:\\Users\\ufo\\Desktop\\rich4\\SAVE2.DAT";// 要讀取的文件
    FileStream fs = new FileStream(openFile, FileMode.Open);// 讀取方式打開,得到流
    fs.Seek(44, SeekOrigin.Begin);// 定位到第44個字節

    byte[] datas = new byte[3];// 要讀取的內容會放到這個數組里
    fs.Read(datas, 0, datas.Length);// 開始讀取,讀取的內容放到datas數組里,0是從第一個開始放,datas.length是最多允許放多少個

  // 下面是個性化處理,不完善勿怪
int a = datas[2]; String strA = Convert.ToString(a, 16); if (strA.Equals("")) { strA = "00"; } if (strA.Length == 1) { strA = "0" + strA; } a = datas[1]; String strB = Convert.ToString(a, 16); if (strB.Equals("")) { strB = "00"; } if (strB.Length == 1) { strB = "0" + strB; } a = datas[0]; String strC = Convert.ToString(a, 16); if (strC.Equals("")) { strC = "00"; } if (strC.Length == 1) { strC = "0" + strC; } String strD = strA + strB + strC; int point = Convert.ToInt32(strD, 16);// 十六進制轉十進制 System.Console.WriteLine("value=" + point);// 這里輸出value=123456,也就是上面寫入程序寫進去的值

 

2017年6月13日11:43:46


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM