- C# 基础教程
- C# - 首页
- C# - 概述
- C# - 环境
- C# - 程序结构
- C# - 基本语法
- C# - 数据类型
- C# - 类型转换
- C# - 变量
- C# - 常量
- C# - 运算符
- C# - 决策制定
- C# - 循环
- C# - 封装
- C# - 方法
- C# - 可空类型
- C# - 数组
- C# - 字符串
- C# - 结构体
- C# - 枚举
- C# - 类
- C# - 继承
- C# - 多态
- C# - 运算符重载
- C# - 接口
- C# - 命名空间
- C# - 预处理器指令
- C# - 正则表达式
- C# - 异常处理
- C# - 文件 I/O
- C# 高级教程
- C# - 属性
- C# - 反射
- C# - 属性
- C# - 索引器
- C# - 委托
- C# - 事件
- C# - 集合
- C# - 泛型
- C# - 匿名方法
- C# - 不安全代码
- C# - 多线程
- C# 有用资源
- C# - 问题与解答
- C# - 快速指南
- C# - 有用资源
- C# - 讨论
从二进制文件读取和写入
BinaryReader 和 BinaryWriter 类用于从二进制文件读取和写入二进制文件。
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