从二进制文件读取和写入



BinaryReaderBinaryWriter 类用于从二进制文件读取和写入二进制文件。

BinaryReader 类

BinaryReader 类用于从文件读取二进制数据。通过将 FileStream 对象传递给其构造函数来创建 BinaryReader 对象。

下表描述了 BinaryReader 类的常用方法

序号 方法及描述
1

public override void Close()

它关闭 BinaryReader 对象和底层流。

2

public virtual int Read()

从底层流中读取字符,并将流的当前位置向前移动。

3

public virtual bool ReadBoolean()

从当前流中读取布尔值,并将流的当前位置向前移动一个字节。

4

public virtual byte ReadByte()

从当前流中读取下一个字节,并将流的当前位置向前移动一个字节。

5

public virtual byte[] ReadBytes(int count)

从当前流中读取指定数量的字节到字节数组中,并将当前位置向前移动该字节数。

6

public virtual char ReadChar()

从当前流中读取下一个字符,并根据使用的编码和从流中读取的特定字符,将流的当前位置向前移动。

7

public virtual char[] ReadChars(int count)

从当前流中读取指定数量的字符,将数据返回到字符数组中,并根据使用的编码和从流中读取的特定字符,将当前位置向前移动。

8

public virtual double ReadDouble()

从当前流中读取一个 8 字节浮点数,并将流的当前位置向前移动八个字节。

9

public virtual int ReadInt32()

从当前流中读取一个 4 字节有符号整数,并将流的当前位置向前移动四个字节。

10

public virtual string ReadString()

从当前流中读取字符串。字符串以长度为前缀,以每次七位的方式编码为整数。

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 表示 false,1 表示 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)

将一个八字节浮点数写入当前流,并将流的位置向前移动八个字节。

10

public virtual void Write(int value)

将一个四字节有符号整数写入当前流,并将流的位置向前移动四个字节。

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
csharp_file_io.htm
广告