Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2005.10.16;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.055 c
1-1127374944
DimonNew
2005-09-22 11:42
2005.10.16
Hint из своей программы, как в IDE Delphi2005


4-1124264334
Shopot
2005-08-17 11:38
2005.10.16
Как конвертировать WideChar to Char?


4-1124123194
dddim
2005-08-15 20:26
2005.10.16
установить Привелегию процессу


14-1127299293
leonidus
2005-09-21 14:41
2005.10.16
Генератор отчетов


14-1127507786
Ученик чародея
2005-09-24 00:36
2005.10.16
Он был хакером.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский