C#一步将类对象写入二进制文件

时间:2017-05-04 01:58:16

标签: c# c++ binaryfiles binary-data

好的,在C ++中,我可以创建一个包含一堆值类型的struct对象,并在需要时将其写入一个写入语句中的二进制文件,如下所示:

struct DataFileHeader {
  unsigned short Id;
  unsigned short Type;
  unsigned int Count;
  unsigned int Offset;
};

...

struct DataFileHeader dataFileHeader;

...
rc = _write(fileHandle, &dataFileHeader, 12);

有没有办法在c#中这样做?我已经将我的结构转换为c#中的类,并且正在使用BinaryFormatter并尝试序列化该对象,但这会在流中添加一堆文本和其他内容。我只想写出对象中的所有值字段。这是可能的还是我必须分别写出对象上的每个字段?

1 个答案:

答案 0 :(得分:0)

void Main()
{
    var fileHeader = new DataFileHeader()
    {
        Count = 10,
        Id = 10,
        Offset = 10,
        Type = 10
    };

    Serialize(fileHeader).Dump();
}

// Define other methods and classes here
public byte[] Serialize<TObject>(TObject obj)
{
    BinaryFormatter binaryFormatter = new BinaryFormatter();
    byte[] ret = null;
    using (MemoryStream ms = new MemoryStream())
    {
        binaryFormatter.Serialize(ms, obj);
        ret = ms.ToArray();
    }
    return ret;
}

[Serializable]
public struct DataFileHeader
{
    public short Id;
    public short Type;
    public int Count;
    public int Offset;
};

如果这不起作用,我认为单独进行可能是唯一的方法。

BitConverter.GetBytes(fileHeader.Count).Concat(BitConverter.GetBytes(fileHeader.Count)).Concat(BitConverter.GetBytes(fileHeader.Count)).Concat(BitConverter.GetBytes(fileHeader.Count)).Dump();