跳到主要内容

C# 二进制文件处理

介绍

在 C# 中,二进制文件是一种以二进制格式存储数据的文件类型。与文本文件不同,二进制文件直接存储数据的原始字节,而不是字符编码。这使得二进制文件非常适合存储复杂的数据结构,如图像、音频、视频或自定义数据格式。

在本教程中,我们将学习如何使用 C# 处理二进制文件,包括如何读取和写入二进制数据,以及如何在实际应用中使用这些技术。

二进制文件的基本概念

二进制文件由一系列字节组成,每个字节可以表示一个 8 位的二进制数。C# 提供了 System.IO 命名空间中的类来方便地处理二进制文件,其中最常用的是 BinaryReaderBinaryWriter

  • BinaryReader: 用于从二进制文件中读取数据。
  • BinaryWriter: 用于将数据写入二进制文件。

读取二进制文件

要读取二进制文件,首先需要创建一个 FileStream 对象来打开文件,然后使用 BinaryReader 读取数据。

以下是一个简单的示例,展示如何读取二进制文件中的整数和字符串:

csharp
using System;
using System.IO;

class Program
{
static void Main()
{
string filePath = "data.bin";

using (FileStream fs = new FileStream(filePath, FileMode.Open))
using (BinaryReader reader = new BinaryReader(fs))
{
int intValue = reader.ReadInt32();
string stringValue = reader.ReadString();

Console.WriteLine($"读取的整数: {intValue}");
Console.WriteLine($"读取的字符串: {stringValue}");
}
}
}

输入和输出

假设 data.bin 文件包含以下数据(以二进制格式存储):

  • 一个 32 位整数:12345
  • 一个字符串:"Hello, World!"

运行上述代码后,输出将是:

读取的整数: 12345
读取的字符串: Hello, World!

写入二进制文件

要写入二进制文件,可以使用 BinaryWriter 类。以下示例展示了如何将整数和字符串写入二进制文件:

csharp
using System;
using System.IO;

class Program
{
static void Main()
{
string filePath = "output.bin";

using (FileStream fs = new FileStream(filePath, FileMode.Create))
using (BinaryWriter writer = new BinaryWriter(fs))
{
writer.Write(12345);
writer.Write("Hello, World!");
}
}
}

输入和输出

运行上述代码后,output.bin 文件将包含以下数据(以二进制格式存储):

  • 一个 32 位整数:12345
  • 一个字符串:"Hello, World!"

实际应用场景

案例:保存和加载游戏进度

假设你正在开发一个简单的游戏,并希望将玩家的进度保存到二进制文件中。以下是一个示例,展示如何保存和加载玩家的分数和名称:

csharp
using System;
using System.IO;

class Game
{
public int Score { get; set; }
public string PlayerName { get; set; }

public void SaveProgress(string filePath)
{
using (FileStream fs = new FileStream(filePath, FileMode.Create))
using (BinaryWriter writer = new BinaryWriter(fs))
{
writer.Write(Score);
writer.Write(PlayerName);
}
}

public void LoadProgress(string filePath)
{
using (FileStream fs = new FileStream(filePath, FileMode.Open))
using (BinaryReader reader = new BinaryReader(fs))
{
Score = reader.ReadInt32();
PlayerName = reader.ReadString();
}
}
}

class Program
{
static void Main()
{
Game game = new Game { Score = 1000, PlayerName = "Player1" };
game.SaveProgress("game_save.bin");

Game loadedGame = new Game();
loadedGame.LoadProgress("game_save.bin");

Console.WriteLine($"加载的分数: {loadedGame.Score}");
Console.WriteLine($"加载的玩家名称: {loadedGame.PlayerName}");
}
}

输入和输出

运行上述代码后,game_save.bin 文件将包含玩家的分数和名称。加载后,输出将是:

加载的分数: 1000
加载的玩家名称: Player1

总结

在本教程中,我们学习了如何在 C# 中处理二进制文件。我们探讨了如何使用 BinaryReaderBinaryWriter 来读取和写入二进制数据,并通过实际案例展示了如何在实际应用中使用这些技术。

提示

提示: 在处理二进制文件时,务必确保文件路径正确,并且在读取或写入完成后关闭文件流,以避免资源泄漏。

附加资源与练习

  • 练习 1: 尝试创建一个包含多个不同类型数据(如整数、浮点数、字符串)的二进制文件,并编写代码读取这些数据。
  • 练习 2: 修改游戏进度保存案例,使其能够保存和加载多个玩家的进度。

通过实践这些练习,你将更深入地理解 C# 中的二进制文件处理技术。