C#讀取和寫入二進位制檔案

2019-10-16 23:16:58

BinaryReaderBinaryWriter類用於讀取和寫入二進位制檔案。

BinaryReader類

BinaryReader類用於從檔案讀取二進位制資料。通過將FileStream物件傳遞給其建構函式來建立BinaryReader物件。

下表介紹了BinaryReader類的常用方法。

BinaryWriter類

BinaryWriter類用於將二進位制資料寫入流。通過將FileStream物件傳遞給其建構函式來建立BinaryWriter物件。

下表介紹了BinaryWriter類的常用方法。

序號 方法 描述
1 public override void Close() 它關閉BinaryWriter物件和底層流。
2 public virtual void Flush() 清除當前寫入器的所有緩衝區,並將任何緩衝資料寫入底層裝置。
3 public virtual long Seek(int offset, SeekOrigin origin) 設定當前流中的位置。
4 public virtual void Write(bool value) 將一個位元組的布林值寫入當前流,其中0表示false1表示true
5 public virtual void Write(byte value) 將無符號位元組寫入當前流,並將流位置提前一個位元組。
6 public virtual void Write(byte[] buffer) 將一個位元組陣列寫入底層流。
7 public virtual void Write(char ch) 將Unicode字元寫入當前流,並根據所使用的編碼並將特定字元寫入流的當前位置。
8 public virtual void Write(char[] chars) 將字元陣列寫入當前流,並根據所使用的編碼和特定字元寫入流的當前位置。
9 public virtual void Write(double value) 8位元組的浮點值寫入當前流,將流位置提前8位。
10 public virtual void Write(int value) 將一個4位元組有符號整數寫入當前流,並將流位置提前4個位元組。
11 public virtual void Write(string value) BinaryWriter的當前編碼中將長度為字首的字串寫入此流,並根據所使用的編碼和將特定字元寫入流來提前流的當前位置。

有關方法的完整列表,請存取Microsoft C# 文件。

範例

以下範例演示讀取和寫入二進位制資料:

using System;
using System.IO;

namespace BinaryFileApplication
{
   class Program
   {
      static void Main(string[] args)
      {
         BinaryWriter bw;
         BinaryReader br;
         int i = 25;
         double d = 3.14157;
         bool b = true;
         string s = "I am happy";

         //create the file
         try
         {
            bw = new BinaryWriter(new FileStream("mydata", FileMode.Create));
         }
         catch (IOException e)
         {
            Console.WriteLine(e.Message + "\n Cannot create file.");
            return;
         }

         //writing into the file
         try
         {
            bw.Write(i);
            bw.Write(d);
            bw.Write(b);
            bw.Write(s);
         }

         catch (IOException e)
         {
            Console.WriteLine(e.Message + "\n Cannot write to file.");
            return;
         }
         bw.Close();

         //reading from the file
         try
         {
            br = new BinaryReader(new FileStream("mydata", FileMode.Open));
         }
         catch (IOException e)
         {
            Console.WriteLine(e.Message + "\n Cannot open file.");
            return;
         }
         try
         {
            i = br.ReadInt32();
            Console.WriteLine("Integer data: {0}", i);
            d = br.ReadDouble();
            Console.WriteLine("Double data: {0}", d);
            b = br.ReadBoolean();
            Console.WriteLine("Boolean data: {0}", b);
            s = br.ReadString();
            Console.WriteLine("String data: {0}", s);
         }
         catch (IOException e)
         {
            Console.WriteLine(e.Message + "\n Cannot read from file.");
            return;
         }
         br.Close();

         Console.ReadKey();
      }
   }
}

當上述程式碼被編譯並執行時,它產生以下結果:

Integer data: 25
Double data: 3.14157
Boolean data: True
String data: I am happy