在C#中,二进制文件的读写通常涉及到System.IO
命名空间中的FileStream
、BinaryReader
和BinaryWriter
类。这些类提供了处理二进制数据的方法,可以读写任何类型的文件,例如图像、音频、视频或任何非文本文件。
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("写入二进制成功。");
}
}
}
以下是使用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("读取二进制成功。");
}
}
}
BinaryWriter
和 BinaryReader
BinaryWriter
和BinaryReader
类提供了直接读写原始数据类型(如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.");
在C#中,可以使用序列化将对象转换为二进制格式,并将其写入文件。同样,可以反序列化文件中的数据以重建对象。
注意:这个在.net 9就移除了,.net 8中会提示过期了,不让用,如果想用
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 许可协议。转载请注明出处!