Форум: "Начинающим";
Текущий архив: 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