我正在使用 Devexpress 的 QuantumGrid 6。我需要将网格设置存储在 xml 配置文件中。不幸的是,网格不允许 XML 作为存储选项。但是,我可以将设置导出到流中。
我正在考虑导出到流,然后将流转换为文本并将其存储为 xml 值。我猜文本必须只包含可打印的字符,如果以某种方式压缩它会很好。
有人可以建议一种编码流的方法吗?
我正在使用 Devexpress 的 QuantumGrid 6。我需要将网格设置存储在 xml 配置文件中。不幸的是,网格不允许 XML 作为存储选项。但是,我可以将设置导出到流中。
我正在考虑导出到流,然后将流转换为文本并将其存储为 xml 值。我猜文本必须只包含可打印的字符,如果以某种方式压缩它会很好。
有人可以建议一种编码流的方法吗?
使用 Indy Misc 调色板中的标准 IdEncoderMIME / IdDecoderMime。你有一些编码流的方法。
您可以使用我创建的基于 XML 存储的框架 SimpleStorage。你可以在这里下载。
它是为了解决像你这样的问题。要执行您想要的操作,您需要一行代码:
SrcStorage.Ensure('Data').Filter('gzip').AsBinary.LoadFromStream(MemoryStream);
它不仅会自动对数据进行 base64 编码,而且还支持过滤器,因此您可以即时 gzip。
因此,只需三行代码,您就可以完成所有工作:
SrcStorage := CreateStorage('BinaryStorage');
SrcStorage.Ensure('Data').Filter('gzip').AsBinary.LoadFromStream(MemoryStream);
SrcStorage.SaveToFile('Data.xml');
它使用 OmniXML 一个非常好的 delphi XML 库。您可以在下载页面上找到所有信息。
我使用DIMimeStreams完成了这项工作,编码为 tStringStream,然后将 stream.datastring 作为特定元素的文本部分。如果您想添加加密,那么我将添加LockBox中的例程以在 MIME 步骤之前加密流。为 2009 年编译的最新版本的 LockBox 可在songbeamer网站上获得。您还可以使用几乎任何压缩为流的压缩例程进行压缩,然后运行 mime 步骤。