在C中保存二进制文件主要有以下两种常见方法,具体选择取决于数据类型和需求:
一、使用 `BinaryFormatter` 进行对象序列化存储
适用于保存自定义类对象、结构体或数组等复杂数据类型,支持直接将内存实体转换为二进制文件,读取时反序列化还原对象。
示例代码:
```csharp
using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
[Serializable]
public class Struct
{
public string a { get; set; }
public string b { get; set; }
public int s { get; set; }
}
public class BinaryStorage
{
private static BinaryFormatter formatter = new BinaryFormatter();
public void Save(Struct obj, string filePath)
{
using (FileStream fs = new FileStream(filePath, FileMode.Create))
{
formatter.Serialize(fs, obj);
}
}
public Struct Load(string filePath)
{
using (FileStream fs = new FileStream(filePath, FileMode.Open))
{
return (Struct) formatter.Deserialize(fs);
}
}
}
```
二、使用 `FileStream` 和 `BinaryWriter` 进行原始二进制数据存储
适用于保存图像、音频等非结构化数据,或需要直接操作二进制流的情况。
示例代码:
```csharp
using System;
using System.IO;
public class BinaryFileHandler
{
public void Save(byte[] data, string filePath)
{
using (FileStream fs = new FileStream(filePath, FileMode.Create))
{
fs.Write(data, 0, data.Length);
}
}
public byte[] Load(string filePath)
{
using (FileStream fs = new FileStream(filePath, FileMode.Open))
{
return new byte[fs.Length];
}
}
}
```
三、注意事项
`BinaryFormatter` 存在安全风险,建议使用更安全的替代方案(如 `Json.NET` 或 `MessagePack`)。
使用 `SaveFileDialog` 和 `OpenFileDialog` 等控件选择文件路径,避免路径冲突。
实际应用中需添加 `try-catch` 块处理文件操作异常。
以上方法可根据具体需求选择,复杂对象推荐序列化,原始数据推荐二进制流操作。