如何读取和编写一个结构文件使用C#?

时间:2008-12-23 01:01:24

标签: c#

我可以使用write(& stName,sizeof(stName),& FileName)并在其他程序中定义一个相同的结构来读取文件(XXX.h),当我使用C时,但我想做同样的使用C#和我不应该使用不安全模式。怎么解决这个问题?

修改

谢谢大家。我会尝试一下

修改

现在,如果我想使用C将struct写入file.h并使用C#从file.h读取结构,我是否有机会解决这个问题而不计算偏移量?因为当我想在结构中添加一些变量或其他结构时,计算偏移量不是一个好的答案。

7 个答案:

答案 0 :(得分:3)

查看ISerializable界面和一般的序列化。

答案 1 :(得分:3)

即使在C中,这对IMO来说也是一件危险的事情。如果您使用不同的编译器,操作系统,体系结构等,您可以非常轻松地“破坏”您的数据文件 - 您绝对依赖于内存中数据的布局。这有点像直接暴露字段而不是属性 - 内存中布局应该是一个实现细节,可以在不改变公共表单(文件)的情况下进行更改。

当然,有很多种方法可以存储数据。例如:

在文件是否具有人类可读性,速度,大小等方面存在余额。有关Java的类似问题的答案,请参阅this question

答案 2 :(得分:1)

你应该看一下NetDataContractSerializer。您可以标记希望序列化的结构部分,并使用文件流将其写出来。

答案 3 :(得分:1)

答案 4 :(得分:1)

使用托管C ++或C ++ / CLI。它可以读取你的.h文件结构。它可以使用:

进行读写
read(in, &structure, sizeof(structure));
write(out, &structure, sizeof(structure));

它可以非常简单地将数据传输到.NET中的任何其他内容。

答案 5 :(得分:0)

您必须使用Bitconverter.convert()单独转换结构的每个成员。当struct包含数值数据类型时,这很有效,但在使用包含更复杂数据类型(如字符串,数组和集合)的结构时,可能必须执行更复杂的操作。出于这样的目的,您需要查看其他人提到的.Net序列化工具。

答案 6 :(得分:0)

您也可以查看Google Protocol buffers。您可能不希望在代码中添加另一个依赖项,但这意味着允许您执行此类操作。