Главная страница
    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.042 c
2-1126635886
_zx
2005-09-13 22:24
2005.10.16
Как сделать форму всегда видимой?


6-1119465288
bugman
2005-06-22 22:34
2005.10.16
UDP Redirect, port mapping, TidMappedPortUDP


1-1127739413
MakedoneZ
2005-09-26 16:56
2005.10.16
Работа с реестром,запуск проги при старте OC


2-1125432210
bogdan
2005-08-31 00:03
2005.10.16
Как обойти ini файл ?


3-1125500254
Ramil
2005-08-31 18:57
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский