如何将不同类型的数据存储在一个文件中?

时间:2015-03-07 14:46:55

标签: c# file-io containers

问题

对于我当前的项目,我需要在带有下划线文件结构的单个文件中存储图像,序列化对象等。由于我的php背景,这整个过程对我来说都是新的。

问题

对该主题有什么好的读物以及"最佳实践"对于那些事情?

备注

用户仍然可以操纵数据,我喜欢。

3 个答案:

答案 0 :(得分:1)

如果您忘记了用户能够修补文件,您应该使用某种形式的文本文件(而不是二进制文件)。

有两种非常流行的文件格式用于像你这样的任务:XML和JSON。对于这两种文件格式都存在大型和丰富的库。

像图片这样的固有二进制数据需要序列化为某种文本格式(如base64),然后才能将其作为单个元素添加到此类文件中。

可以使用简单的文本编辑器编辑这些文件。

答案 1 :(得分:0)

当我需要" savefile"像这样,首先我将对象的类型存储在1个字节中,然后将对象长度存储在4个字节(二进制int)中,然后将整个对象存储为二进制。如果需要,可以在序列化对象的基础上添加加密,只需将代码编入读者。

System.IO.BinaryWriterSystem.IO.BinaryReader非常适合。

首先将int转换为4个字节,将其写入保存文件,将要保存的对象类型的枚举值转换为字节,将其写入文件,然后编写序列化对象。

打开保存的对象时,只需从保存文件的开头开始,你就知道你需要读取4个字节来获取对象长度,一个字节来获取类型,然后只读取尽可能多的字节数读长。读完该对象后,保存文件中的指针将为下一个对象的新4字节整数。 继续,直到你到达文件的末尾,然后你去:)

答案 2 :(得分:0)

为此,您将使用带有属性的Object Class来包含您需要的各个项类型。

创建一个网页/窗口表单等,在屏幕上加载每个Object属性的数据,允许用户更改数据(文本,数字,图像等)。

将这些值存储在对象实例中,然后将其序列化(例如,二进制或XML),并保存到文件中。

然后,您可以再次加载文件并将其反序列化为对象实例,以显示和允许编辑。

但是,看到你的编辑后......

用户如何编辑文本文件中的图像?您确定要将序列化数据存储在用户可以手动编辑的文件中吗?

即使使用zip文件,用户也可以完全破坏您认为存在的任何结构。如果您可以扩展他们存储的内容以及他们可以编辑的数据部分以及这些编辑包含的内容,则可能更容易看到您的问题。