Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.10.16;
Скачать: CL | DM;

Вниз

Потоки...   Найти похожие ветки 

 
Lexandre   (2005-09-07 13:13) [0]

Подскажите, мне нужно упаковать данные полученные из RichEdita и отдельно их сохранить. Для этого я передаю в функцию поток данных выделенного текста (TString) и имя будущего файла
Упаковываю при помощи TCompressionStream поэтому TString преобразовываю в TStream, затем упаковываю, затем опять передаю его в TStringList чтобы сохранить в файл
Проблема в том что данные при преобразовании кудато деваются - файл пустой ЧТО Я ДЕЛАЮ НЕ ТАК?

procedure Compress(Sel_Text: TStrings; FileName: String);
var
Source: TStream;        //поток для компрессии
Source2: TStringList;   //переменная для сохранения потока в файл
begin
Source:=TStringStream.Create("");
Sel_Text.SaveToStream(Source);
....
//сдесь идет упаковка Source
....
// передача упакованых данных в файл
Source2:=TStringList.Create;  
Source2.LoadFromStream (Source);
Source2.SaveToFile(FileName);
end;


 
Eraser ©   (2005-09-07 13:49) [1]

Lexandre   (07.09.05 13:13)

Source: TStream;


Дурной тон, надо сразу объявлять нужный класс.
__
по сабжу - скорее всего где-то забыл поставить Position := 0;
__

Объекты надо уничтожать (см. Free).


 
easy ©   (2005-09-07 14:05) [2]

uses ZLib;

procedure Compress(RE: TRichEdit; FN: string);
var
 CS: TCompressionStream;
 FS: TFileStream;
 bytecount: Integer;
 MS: TMemoryStream;
begin
 MS := TMemoryStream.Create;
 FS := TFileStream.Create(FN, fmCreate);
 try
   RE.Lines.SaveToStream(MS);
   MS.Position := 0;
   bytecount := MS.Size;
   FS.Write(bytecount, SizeOf(bytecount));
   CS := TCompressionStream.Create(clMax, FS);
   try
     CS.CopyFrom(MS, bytecount);
   finally
     CS.Free;
   end;
 finally
   MS.Free;
   FS.Free;
 end;

end;

procedure DeCompress(RE: TRichEdit; FN: string);
var
 DS: TDecompressionStream;
 FS: TFileStream;
 bytecount: Integer;
 MS: TMemoryStream;
begin
 FS := TFileStream.Create(FN, fmOpenRead);
 MS := TMemoryStream.Create;
 try
   FS.Read(bytecount, SizeOf(bytecount));
   if bytecount > 0 then
   begin
     DS := TDecompressionStream.Create(FS);
     try
       MS.CopyFrom(DS, bytecount);
       MS.Position := 0;
       RE.Lines.LoadFromStream(MS);
     finally
       DS.Free;
     end;
   end;
 finally
   fs.Free;
   MS.Free;
 end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 Compress(RichEdit1, "C:\Temp\rich1.zlib");
 DeCompress(RichEdit2, "C:\Temp\rich1.zlib");
end;



Страницы: 1 вся ветка

Текущий архив: 2005.10.16;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.059 c
1-1127703560
Laymer
2005-09-26 06:59
2005.10.16
Запрет закрытие программы.


1-1127653321
kami
2005-09-25 17:02
2005.10.16
Невозможно установить иконку формы и приложения


5-1102414231
Anatoly
2004-12-07 13:10
2005.10.16
Строковое свойство с выпадающим списком


2-1126641667
keal
2005-09-14 00:01
2005.10.16
Как сделать сервер по типу icq?


2-1126083541
worldmen
2005-09-07 12:59
2005.10.16
Форматирование даты.