Главная страница
    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.049 c
14-1127141196
Zeqfreed
2005-09-19 18:46
2005.10.16
Блок питания


3-1125226578
Ilg
2005-08-28 14:56
2005.10.16
Удаление бызы данных


1-1127809485
BaxTMaH
2005-09-27 12:24
2005.10.16
Как в Edit вводить только цифры?


2-1127123367
Wolferio
2005-09-19 13:49
2005.10.16
Как удалить файл


14-1127580199
Иван Шихалев
2005-09-24 20:43
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский