Проблем с RichEdit и FileStream

3 отговора 90 прегледа
#1

Проблем с RichEdit и FileStream

Опитвам да запиша RichEdit във FileStream, заедно с друга информация след това:

Stream:=TFileStream.Create('Test.txt',fmCreate or fmShareExclusive);
RichEdit1.Lines.SaveToStream(Stream);
Buff:='This is other info'; // Buff e oт тип string
Len:=length(Buff); // Len e oт тип integer
Stream.Write(Len,SizeOf(Len));
Stream.Write(pointer(Buff)^,Len);

Всичко е наред със записа, но после, при четене с RichEdit.LoadFromStream (преди това има Srtream.Free и създаване с параметър fmOpenRead), указателя на потока е установен в края на файла и не мога да прочета записаната информация след RichEdit. Иначе форматирането в Rich-a и всичко останало е ОК.

Как мога да реша проблема? И това ли е най-удачния начин за запис на форматиран текст (RichEdit) заедно с други данни в един и същи файл? Мерси на отзовалите се!

Отговор
в отговор на M #2

Re: Проблем с RichEdit и FileStream

Начина не е удачен.
Невъзможен е.

Отговор
в отговор на M #3

Re: Проблем с RichEdit и FileStream

Не разбирам, защо не работиш стандартно със re1.Lines.SaveToFile('filpathandname'); и после не отваряш filepathandname със паскалските функции - на външен вид кода не изглежда по-дълъг и сложен

-------------
Special killer double trouble triple extra nicotine monster!
Отговор
в отговор на M #4

Re: Проблем с RichEdit и FileStream

Успях да си реша проблема с временен MemoryStream в който се записва и чете RichEdit контрола.

При запис: големината на MemoryStream-a се записва като longint (4-байта) във FileStream-a и след това се копира MemoryStream-a във FileStream-a с FileStream.CopyFrom.

При четене: извлича се дължината на данните за RichEdit-а и от FileStream-a се копира съответната порция в MemoryStream-a, от който се зарежда RichEdit-a.

Проблема в същност е, че при зареждане RichEdit чете целия поток и данните записани след това се губят (не се знае дължината на самия RichEdit, за да се позиционира указателя след него). С временния MemoryStream всичко си идва на мястото.

Отговор