Как я могу закодировать поток, чтобы он мог быть сохранен в файле XML? - PullRequest
3 голосов
/ 18 июля 2009

Я работаю с QuantumGrid 6 от Devexpress. Мне нужно сохранить настройки сетки в XML-файле конфигурации. К сожалению, сетка не позволяет использовать XML в качестве опции хранения. Однако я могу экспортировать настройки в поток.

Я думаю экспортировать в поток, затем преобразовать поток в текст и сохранить его как значение XML. Я предполагаю, что текст должен содержать только печатные символы, и было бы хорошо, если бы он был каким-то образом сжат.

Может кто-нибудь предложить метод кодирования потока?

Ответы [ 3 ]

3 голосов
/ 18 июля 2009

Вы можете использовать SimpleStorage, фреймворк на основе XML-хранилища, который я создал. Вы можете скачать его здесь.

Скачать SimpleStorage

Это было сделано для решения таких проблем, как ваша. Чтобы сделать то, что вы хотите, вам нужна одна строка кода:

SrcStorage.Ensure('Data').Filter('gzip').AsBinary.LoadFromStream(MemoryStream);

Мало того, что base64 автоматически кодирует данные, но также поддерживает фильтр, чтобы вы могли распаковать на лету.

Итак, с тремя строками кода вы можете сделать все это:

SrcStorage := CreateStorage('BinaryStorage'); SrcStorage.Ensure('Data').Filter('gzip').AsBinary.LoadFromStream(MemoryStream); SrcStorage.SaveToFile('Data.xml');

Он использует OmniXML, очень хорошую библиотеку Delphi XML. Вы можете найти всю информацию на странице загрузки.

3 голосов
/ 18 июля 2009

Используйте стандартный IdEncoderMIME / IdDecoderMime из палитры Indy Misc. У вас есть несколько методов для кодирования потоков.

0 голосов
/ 20 июля 2009

Я сделал это, используя DIMimeStreams , кодировав в tStringStream, а затем поместив stream.datastring в качестве текстовой части определенного элемента. Если вы хотите добавить шифрование, то я бы добавил подпрограммы, найденные в LockBox , чтобы зашифровать поток до шага MIME. Последняя версия LockBox, скомпилированная для 2009 года, доступна на веб-сайте songbeamer . Вы также можете сжимать, используя практически любую подпрограмму сжатия, которая сжимает в поток, а затем выполнить шаг mime.

...