C# 之 读写二进制文件
【摘要】
C# 之 读写二进制文件
1.BinaryReader类2.BinaryWriter类3.使用简例
1.BinaryReader类
BinaryReader类用特定的编码将基元数据类型读作二进制值。
常用构造函数和常用函数:
成员类型成员名说明构造函数BinaryReader(Stream)基于所提供的流,用 UTF8Encoding 初始化Bina...
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(); }
}
PS:
当读取指定类型的值的时候,若不存在会抛如下异常:
”System.IO.EndOfStreamException:“Unable to read beyond the end of the stream.”
由下图可知,当我只写入一个String类型的值的时候,读取时则也只能读取一个String类型的值,否则就会报错,若不知道此文件中是否存在,需要在此按需try… catch… 处理一下异常情况。
文章来源: czhenya.blog.csdn.net,作者:陈言必行,版权归原作者所有,如需转载,请联系作者。
原文链接:czhenya.blog.csdn.net/article/details/108049835
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)