C#中的二进制文件

时间:2010-06-21 14:19:10

标签: c# binaryfiles

我正在用C#编写一个项目 我想在二进制文件中保存一个类,然后在C中读取该文件 我想知道如何在不序列化和反序列化的情况下完成它 请帮帮我

4 个答案:

答案 0 :(得分:7)

您正在谈论跨平台序列化。

一些选择:

  • 将其序列化为文本(xml,json);毕竟文本仍然是二进制的 - 而且很简单
  • 手动序列化
  • 使用第三方跨平台序列化程序

但无论你做什么,都不要使用BinaryFormatter。我强调这一点的原因是,如果您搜索C#二进制序列化,它可能是您首先看到的,但完全不适合您的目的。该格式是专有的,包括仅从.NET有意义的类型信息(实际上不是来自非托管C)。

我非常依赖“协议缓冲区”作为序列化API,并且有both C# and C versions here

答案 1 :(得分:4)

将对象的状态保存到文件意味着将其序列化。

从文件中读取对象的状态意味着反序列化它。

使用序列化/反序列化来执行您想要的操作。

由于您需要跨不同语言执行此操作,因此使用内置序列化程序可能不会非常有用。

您可以为C#部分使用其中一个XML序列化程序,但之后必须在c中解析XML。

另一个选择是编写自己的自定义serizlizer来执行此操作。这样您就可以完全控制文件格式。

答案 2 :(得分:0)

我认为你的意思是你想让一个C#应用程序写一个文件。然后有一个单独的C / C ++应用程序读取该文件?基于这个假设,在C#中,您需要查看System.IO命名空间,特别是FileStream类。

另外,我建议编写一个C#类库项目,通过.NET序列化类处理这个读/写,然后从C#代码中调用它,并使用COM([assembly: ComVisible(true)])从C / C ++代码访问.NET代码。

答案 3 :(得分:0)

你想保存课程吗?这是不可能的,因为类被编译成.net。

中的程序集(exe,dll)

我认为你想要的是将object或更适合的状态struct保存到文件中。

您可以使用BinaryWriter类将该类的所有字段写入文件。您也可以have a look at this