编辑
2025-09-28
C#
00

目录

使用 FileStream
写入二进制文件
读取二进制文件
使用 BinaryWriter 和 BinaryReader
写入二进制文件
读取二进制文件
实用示例
序列化和反序列化对象

在C#中,二进制文件的读写通常涉及到System.IO命名空间中的FileStreamBinaryReaderBinaryWriter类。这些类提供了处理二进制数据的方法,可以读写任何类型的文件,例如图像、音频、视频或任何非文本文件。

使用 FileStream

FileStream类提供了对文件的字节级读写访问。它是一个表示文件的流,可以用于读取和写入字节。

写入二进制文件

以下是使用FileStream类写入二进制文件的示例:

C#
namespace AppBinaryfile { internal class Program { static void Main(string[] args) { string filePath = @"./binaryfile.bin"; byte[] bytesToWrite = new byte[] { 0x0F, 0x1B, 0x3C, 0x4D, 0x5E, 0x6F }; using (FileStream fileStream = new FileStream(filePath, FileMode.Create)) { fileStream.Write(bytesToWrite, 0, bytesToWrite.Length); } Console.WriteLine("写入二进制成功。"); } } }

image.png

读取二进制文件

以下是使用FileStream类读取二进制文件的示例:

C#
namespace AppBinaryfile { internal class Program { static void Main(string[] args) { string filePath = @"./binaryfile.bin"; using (FileStream fileStream = new FileStream(filePath, FileMode.Open)) { byte[] bytesToRead = new byte[fileStream.Length]; int bytesRead = fileStream.Read(bytesToRead, 0, bytesToRead.Length); Console.WriteLine($"Number of bytes read: {bytesRead}"); foreach (byte b in bytesToRead) { Console.Write($"{b:X2} "); } } Console.WriteLine("读取二进制成功。"); } } }

image.png

使用 BinaryWriterBinaryReader

BinaryWriterBinaryReader类提供了直接读写原始数据类型(如int, float, string等)的方法,而无需手动处理字节转换。

写入二进制文件

以下是使用BinaryWriter写入二进制文件的示例:

C#
namespace AppBinaryfile { internal class Program { static void Main(string[] args) { string filePath = @"./binaryfile.bin"; using (FileStream fileStream = new FileStream(filePath, FileMode.Create)) using (BinaryWriter writer = new BinaryWriter(fileStream)) { writer.Write(1.25); // 写入一个double值 writer.Write(10); // 写入一个int值 writer.Write("Hello"); // 写入一个字符串 } Console.WriteLine("写入二进制成功。"); } } }

读取二进制文件

以下是使用BinaryReader读取二进制文件的示例:

C#
using System; using System.IO; string filePath = @"C:\example\binaryfile.bin"; using (FileStream fileStream = new FileStream(filePath, FileMode.Open)) using (BinaryReader reader = new BinaryReader(fileStream)) { double doubleValue = reader.ReadDouble(); int intValue = reader.ReadInt32(); string stringValue = reader.ReadString(); Console.WriteLine($"Double: {doubleValue}"); Console.WriteLine($"Int: {intValue}"); Console.WriteLine($"String: {stringValue}"); } Console.WriteLine("Binary file read successfully with BinaryReader.");

image.png

实用示例

序列化和反序列化对象

在C#中,可以使用序列化将对象转换为二进制格式,并将其写入文件。同样,可以反序列化文件中的数据以重建对象。

注意:这个在.net 9就移除了,.net 8中会提示过期了,不让用,如果想用

image.png

C#
using System.Runtime.Serialization.Formatters.Binary; namespace AppBinaryfile { [Serializable] // 表明此类可以被序列化 public class Person { public string Name { get; set; } public int Age { get; set; } } internal class Program { static void Main(string[] args) { string filePath = @"./person.bin"; // 序列化对象到文件 Person person = new Person { Name = "John Doe", Age = 30 }; using (FileStream fileStream = new FileStream(filePath, FileMode.Create)) { BinaryFormatter formatter = new BinaryFormatter(); formatter.Serialize(fileStream, person); } // 从文件反序列化对象 Person deserializedPerson; using (FileStream fileStream = new FileStream(filePath, FileMode.Open)) { BinaryFormatter formatter = new BinaryFormatter(); deserializedPerson = (Person)formatter.Deserialize(fileStream); } Console.WriteLine($"Deserialized Person: {deserializedPerson.Name}, {deserializedPerson.Age}"); } } }

在上述代码中,通过标记Person类为[Serializable],我们可以使用BinaryFormatter来序列化和反序列化该类的实例。

总结来说,C#中的二进制文件读写提供了强大的功能,允许开发者以字节级别处理文件数据。无论是直接操作字节还是处理复杂的数据结构,C#的System.IO命名空间都提供了必要的工具来简化这些任务。记得在处理文件时,始终确保正确地打开和关闭文件流,以避免资源泄露和文件损坏。

本文作者:技术老小子

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!