Проблем с RichEdit и FileStream
3 отговора
90 прегледа
Проблем с 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) заедно с други данни в един и същи файл? Мерси на отзовалите се!
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) заедно с други данни в един и същи файл? Мерси на отзовалите се!
Re: Проблем с RichEdit и FileStream
Не разбирам, защо не работиш стандартно със re1.Lines.SaveToFile('filpathandname'); и после не отваряш filepathandname със паскалските функции - на външен вид кода не изглежда по-дълъг и сложен 
-------------
Special killer double trouble triple extra nicotine monster!
-------------
Special killer double trouble triple extra nicotine monster!
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 всичко си идва на мястото.
При запис: големината на MemoryStream-a се записва като longint (4-байта) във FileStream-a и след това се копира MemoryStream-a във FileStream-a с FileStream.CopyFrom.
При четене: извлича се дължината на данните за RichEdit-а и от FileStream-a се копира съответната порция в MemoryStream-a, от който се зарежда RichEdit-a.
Проблема в същност е, че при зареждане RichEdit чете целия поток и данните записани след това се губят (не се знае дължината на самия RichEdit, за да се позиционира указателя след него). С временния MemoryStream всичко си идва на мястото.