由旧C代码编写的文件,移到C#

时间:2009-10-20 16:17:04

标签: c# c file binary

我正在努力将旧的C程序(目前在UNIX上运行)转换为我们的C#系统。

程序将一些数据构建到几个结构中,然后使用如下一系列结果写入文件:

fwrite ( &loc,  sizeof ( struct loc_items ),  1, hdata.fp );

使用loc作为数据,struct loc_items是结构,它是一种类型。

我的问题是,我是否能够将此文件输出与C#匹配?假设我可以匹配endian格式和浮点数,整数等大小

因为它在fwrite中编写整个结构,所以我不知道它正在编写结构的不同变量的顺序。 fwrite可能会在结构周围填充任何问题吗?

有什么建议吗?

2 个答案:

答案 0 :(得分:5)

您有多种选择。

  • 使用BinaryWriter并单独编写结构的每个字段。
  • 使用编组来获取结构的字节数组并将其写入流中。
  • 使用像Miguel de Icaza的结构库这样的库。

就个人而言,我不喜欢在这种情况下使用编组。我只需在您的结构或类中添加一些“打开/保存”,“读/写”,“水合/脱水”,“序列化/反序列化”方法。

class POCO {
    int aaa;
    double bbb;

    public void Read(BinaryReader r) {
        aaa = r.ReadInt32();
        bbb = r.ReadDouble();
    }
    public void Write(BinaryWriter w) {
        w.Write(aaa);
        w.Write(bbb);
    }
}

通过这种方式,您可以完全控制读取和写入的内容。

答案 1 :(得分:3)

进行快速单元测试,使用移植的C#版本生成文件,然后比较系统生成的文件中的内容。然后,您将至少进行一项自动发现差异的测试。