簡體   English   中英

如何讀取和編寫一個結構文件使用C#?

[英]how to read and write a struct to file use C#?

我可以使用write(&stName,sizeof(stName),&FileName)並在其他程序中定義一個相同的結構來讀取文件(XXX.h),當我使用C時,但我想做同樣的使用C#而我不應該使用不安全的模式。 怎么解決這個問題?

編輯:

謝謝大家。 我會嘗試一下

編輯:

現在,如果我想使用C將struct寫入file.h並使用C#從file.h讀取結構,我是否有機會解決這個問題而不計算偏移量? 因為當我想在結構中添加一些變量或其他結構時,計算偏移量不是一個好的答案。

一般來說,請查看ISerializable接口和序列化。

即使在C中,這對IMO來說也是一件危險的事情。 如果您使用不同的編譯器,操作系統,體系結構等,您可以非常輕松地“破壞”您的數據文件 - 您絕對依賴於內存中數據的布局。 這有點像直接暴露字段而不是屬性 - 內存中布局應該是一個實現細節,可以在不改變公共表單(文件)的情況下進行更改。

當然,有很多種方法可以存儲數據。 例如:

  • 二進制序列化(仍然非常脆弱,IMO)
  • XML序列化
  • 谷歌的協議緩沖區
  • 節約
  • YAML
  • 手寫序列化/反序列化,例如使用BinaryReader和BinaryWriter

在文件是否可讀,速度,大小等方面存在余額。請參閱此問題以獲取有關Java的類似問題的答案。

你應該看一下NetDataContractSerializer 您可以標記希望序列化的結構部分,並使用文件流將其寫出。

使用托管C ++或C ++ / CLI。 它可以讀取你的.h文件結構。 它可以使用以下方式讀寫:

read(in, &structure, sizeof(structure));
write(out, &structure, sizeof(structure));

它可以非常簡單地將數據傳輸到.NET中的任何其他內容。

您必須使用Bitconverter.convert()單獨轉換結構的每個成員。 當struct包含數值數據類型時,這很有效,但在使用包含更復雜數據類型(如字符串,數組和集合)的結構時,可能必須執行更復雜的操作。 出於這種目的,您需要查看其他人提到的.Net序列化工具。

您也可以查看Google協議緩沖區 您可能不希望在代碼中添加另一個依賴項,但這意味着允許您執行此類操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM