C# 之 读写二进制文件

C# 之 读写二进制文件

  • 1.BinaryReader类
  • 2.BinaryWriter类
  • 3.使用简例

1.BinaryReader类

BinaryReader类用特定的编码将基元数据类型读作二进制值。

常用构造函数和常用函数:

成员类型 成员名 说明
构造函数 BinaryReader(Stream) 基于所提供的流,用 UTF8Encoding 初始化BinaryReader 类的新实例。
构造函数 BinaryReader(Stream,Encoding) 基于所提供的流和特定的字符编码,初始化BinaryReader 类的新实例。
方法 Close() 关闭当前阅读器及基础流。
方法 Dispose() 释放由 BinaryReader 类的当前实例占用的所有资源。
方法 Read() 从基础流中读取字符,并根据所使用的 Encoding和从流中读取的特定字符,提升流的当前位置。
方法 Read(Byte[], Int32,Int32) 从字节数组中的指定点开始,从流中读取指定的字节数。
方法 Read(Char[], Int32,Int32) 从字符数组中的指定点开始,从流中读取指定的字符数。
方法 Read7BitEncodedInt 以压缩格式读入 32 位整数。
方法 ReadBoolean 从当前流中读取 Boolean 值,并使该流的当前位置提升 1 个字节。
方法 ReadByte 从当前流中读取下一个字节,并使流的当前位置提升1 个字节。
方法 ReadBytes 从当前流中读取指定的字节数以写入字节数组中,并将当前位置前移相应的字节数。
方法 ReadChar 从当前流中读取下一个字符,并根据所使用的Encoding 和从流中读取的特定字符,提升流的当前位置。
方法 ReadChars 从当前流中读取指定的字符数,并以字符数组的形式返回数据,然后根据所使用的 Encoding 和从流中读取的特定字符,将当前位置前移。
方法 ReadDecimal 从当前流中读取十进制数值,并将该流的当前位置提升16个字节。
方法 ReadDouble 从当前流中读取 8 字节浮点值,并使流的当前位置提升 8 个字节

2.BinaryWriter类

BinaryWriter类以二进制形式将基元类型写入流,并支持用
特定的编码写入字符串。

常用构造函数和常用函数:

成员类型 成员名 说明
构造函数 BinaryWriter() 初始化向流中写入的 BinaryWriter 类的新实例。
构造函数 BinaryWriter(Stream) 基于所提供的流,用 UTF-8 作为字符串编码来初始化 BinaryWriter 类的新实例。
构造函数 BinaryWriter(Stream,Encoding) 基于所提供的流和特定的字符编码,初始化BinaryWriter 类的新实例。
方法 Close 关闭当前的 BinaryWriter 和基础流。
方法 Dispose() 释放由 BinaryWriter 类的当前实例占用的所有资源。
方法 Seek 设置当前流中的位置。
方法 Write BinaryWriter类具有18种Write方法的重载形式,实现将各种类型的数据写入流。
方法 Write7BitEncodedInt 以压缩格式写出 32 位整数。

3.使用简例

class Programma
{
   static void Main(string[] args)
   {
       string path = @"E:\MyTest.dat";
            
       BinaryWriter binWrite = new BinaryWriter(File.Open(path, FileMode.OpenOrCreate));
       // 各种形式的写入文件
       binWrite.Write("Czhenya");
       binWrite.Write(1.414);
       binWrite.Write(1);
       binWrite.Write(true);
       binWrite.Write(false);
       binWrite.Write(new char[] { 'a', 'b', 'c' });
       binWrite.Close();

       // 读取文件
       BinaryReader reader = new BinaryReader(File.OpenRead(path));
       Console.WriteLine(reader.ReadString());
       Console.WriteLine(reader.ReadDouble());
       Console.WriteLine(reader.ReadInt32());
       Console.WriteLine(reader.ReadBoolean());
       Console.WriteLine(reader.ReadBoolean());
       Console.WriteLine(new char[] { 'a', 'b', 'c' }, 1, 2);
       reader.Close();

       Console.ReadKey();
   }
}

C# 之 读写二进制文件_第1张图片

PS:
当读取指定类型的值的时候,若不存在会抛如下异常:
”System.IO.EndOfStreamException:“Unable to read beyond the end of the stream.”
由下图可知,当我只写入一个String类型的值的时候,读取时则也只能读取一个String类型的值,否则就会报错,若不知道此文件中是否存在,需要在此按需try… catch… 处理一下异常情况。

C# 之 读写二进制文件_第2张图片

你可能感兴趣的:(C#,从零开启,ジ﹋★☆『,C,#...,』,c#)