我想在C#中的文件中保存数据结构,但我不想使用序列化和反序列化来实现它。 我希望实现这个动作,就像我用C和C ++语言实现它一样。
答案 0 :(得分:3)
要在C#/ .NET中以“老式方式”实现它,基于C ++可能使用原始文件和流的假设,您需要从.NET Framework的System.IO
命名空间开始。
注意:这允许您完成文件读/写过程的自定义,因此您不必依赖隐式的序列化机制。
可以使用System.IO.File和System.IO.FileInfo管理和打开文件,以访问Streams。 (请参阅该页面底部的继承层次结构以查看不同类型的流。)
所以你不必直接操作位和字节(除非你想)。
对于二进制文件访问,您可以使用System.IO.BinaryReader和BinaryWriter。例如,它可以轻松地在本机数据类型和流字节之间进行转换。
对于基于文本的访问文件访问权限,请使用System.IO.StreamReader和StreamWriter。让我们使用字符串和字符而不是担心字节。
如果流上支持随机访问,请使用Stream.Seek(..)之类的方法根据您决定使用的任何算法来确定记录长度等来跳转。
答案 1 :(得分:0)
如果您不想序列化它,您可以随时使用BitConverter通过GetBytes将成员转换为字节,并将它们直接写入Stream。
答案 2 :(得分:0)
您可以使用PtrToStructure和StructureToPtr将内容转储到字节数组中的非类型化数据中,您可以轻松地将该文件作为一个块推送到该文件。如果您的结构包含对其他对象的引用,请不要尝试此操作(尝试保留索引,或许)。