Перейти к содержанию
Fire Monkey от А до Я
  • 0

Как перевести данные из TStrings в TMemoryStream?


Delpher-X

Вопрос

У меня есть следующий код, который передает данные из потока в объект типа TStrings: 

var
F : TMemoryStream;

S : TStrings;

begin
F := TMemoryStream.Create;
S := TStringList.Create;
F.LoadFromFile('C:/File.jpg');
S.LoadFromStream(F);

Из TMemoryStream в TStrings все передается нормально. Однако - как обратно? Как снова преобразовать объект TString в поток данных, дабы снова можно было бы сохранить его в полноценный файл? 

Ссылка на комментарий

Рекомендуемые сообщения

  • 0

ваш пример у меня вызывает вопрос - откуда у вас в jpg файле строки, которые вы так лихо загружаете в TStrings?

и что вам мешает сделать просто S.LoadFromFile() ??

более того, и SaveToFile тоже есть. Вполне полноценный

ну и предполагается что оф справка должна быть изучена ДО вопросов на форуме

http://docwiki.embarcadero.com/Libraries/Sydney/en/System.Classes.TStrings_Methods

Изменено пользователем krapotkin
Ссылка на комментарий
  • 0
7 часов назад, krapotkin сказал:

и что вам мешает сделать просто S.LoadFromFile() ??

более того, и SaveToFile тоже есть. Вполне полноценный

Нет, мне нужно именно из потока. А потом, чтобы снова загрузить в поток. 

7 часов назад, krapotkin сказал:

ваш пример у меня вызывает вопрос - откуда у вас в jpg файле строки, которые вы так лихо загружаете в TStrings?

Ну, любой файл, это ведь строки бинарного кода, не так ли? 

Ссылка на комментарий
  • 0

Вы вообще не читаете? я и ссылку дал. LoadFromStream находится прямо рядом с LoadFromFile. Мы, надеюсь, о Stream говорим, когда имеем в виду "поток" ?

 

И файл это никакие не строки бинарного кода. Это полная чушь.  Файл это просто сырые данные, набор байтов.

А строки как таковые - это понятие, которое вводится специально, с описанием, что имеется в виду, в каком формате хранится, и как с этим работать.

Так что нет. Совсем нет.

Ссылка на комментарий
  • 0
28 минут назад, krapotkin сказал:

Вы вообще не читаете? я и ссылку дал. LoadFromStream находится прямо рядом с LoadFromFile. Мы, надеюсь, о Stream говорим, когда имеем в виду "поток" ?

Тут вот какое дело: я хочу разрезать stream для передачи его по кусочку в формате data. А потом, в точке доставки, снова склеить и перегнать в stream. 

Ссылка на комментарий
  • 0

по какому протоколу? голый TCP? 

Передавать вы все равно будете скорее всего либо TStream либо TBytes.

Если у вас есть TStream, то вам нужно его часть скопировать в другой TStream, и его отослать. Опять же в документации http://docwiki.embarcadero.com/Libraries/Sydney/en/System.Classes.TStream.CopyFrom

То же самое можно сказать и насчет TBytes http://docwiki.embarcadero.com/Libraries/Sydney/en/System.Classes.TStream.ReadBuffer

Играйтесь на здоровье. Но реализация собственного протокола обмена это всегда гораздо больший геморрой, чем например использование http

Ну и конечно TStrings тут вообще никаким боком...

Ссылка на комментарий
  • 0
5 часов назад, krapotkin сказал:

по какому протоколу? голый TCP? 

Это не важно. 

 

5 часов назад, krapotkin сказал:

Если у вас есть TStream, то вам нужно его часть скопировать в другой TStream, и его отослать. 

У меня такая ситуация, что я не могу отсылать TStream'ы. Data могу, а Stream - не проходит. 

Ссылка на комментарий
  • 0
В 10.05.2021 в 22:09, Delpher-X сказал:

Из TMemoryStream в TStrings все передается нормально. Однако - как обратно? Как снова преобразовать объект TString в поток данных, дабы снова можно было бы сохранить его в полноценный файл? 

  SaveToStream не подходит?)

если грузить jpeg в tstringlist а потом через text выбирать куски и передавать, то с вероятностью 99.9999% на той стороне ничего не соберется, будут большие потери данных. так как в тексте будут отсутствовать комбинации байтов для которых нет символов. 

сколько годиков гению программирования интересно?)

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...