![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Добрый день. Проблема следующая:
Хочу объединить 3 TMemoryStream, сохранить, загрузить и разделить. Что я делаю Гружу в стримы информацию из memo, затем объединяю и на этом моменте получаю кучу ошибок вот то что сделал сейчас Код:
private AStream, BStream, CStream,ResultStream: TMemoryStream; procedure CompressFiles(ResStream: TMemoryStream); procedure StringToStream(const AString: string; Stream: TMemoryStream); begin Stream:=TMemoryStream.Create; Stream.Write(AString[1], Length(AString)); end; procedure TForm1.CompressStream(ResStream: TMemoryStream); var outfile: TMemoryStream; compr : TMemoryStream; i,l,b : Integer; s : String; begin outFile := TMemoryStream.Create; try { отмечаем количество файлов } l := 3; outfile.Write(l,SizeOf(l)); s := 'AStream'; l := Length(s); outfile.Write(l,SizeOf(l)); outfile.Write(s[1],l); { размер стрима } l := AStream.Size; outfile.Write(l,SizeOf(l)); {упаковываем файл и сохраняем во временный файл} outfile.LoadFromStream(AStream); // outfile.SaveToFile('mestream'); AStream.Free; // finally outfile.Free; end; end; procedure TForm1.Button1Click(Sender: TObject); begin StringToStream(memo1.Text, AStream); StringToStream(memo2.Text, BStream); StringToStream(memo3.Text, CStream); Button2.Enabled:=true; Button3.Enabled:=true; end; procedure TForm1.Button2Click(Sender: TObject); begin CompressStream(ResultStream); end; Уже 3 раз начинаю писать этот код и все время натыкаюсь на проблемы, кто может подсказать что не так и как это можно сделать(и если не сложно помочь с исходником)? Последний раз редактировалось Virus191288, 12.05.2014 в 19:29. |
#2
|
||||
|
||||
![]() Цитата:
Код:
procedure StringToStream(const AString: string; Stream: TMemoryStream); begin Stream:=TMemoryStream.Create; Stream.Write(AString[1], Length(AString)); end; Код:
procedure StringToStream(const AString: string; var Stream: TMemoryStream); Во-вторых... эээ... это наверное неполные исходники? Вот в этом методе: Код:
procedure TForm1.CompressStream(ResStream: TMemoryStream); |
#3
|
|||
|
|||
![]() Спасибо за подсказку на я уже все сделал. Вот пример:
Код:
unit Unit1; interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, Menus; type { TForm1 } TForm1 = class(TForm) Button1: TButton; Button3: TButton; Memo1: TMemo; Memo2: TMemo; Memo3: TMemo; Memo4: TMemo; Memo5: TMemo; Memo6: TMemo; procedure Button1Click(Sender: TObject); procedure Button3Click(Sender: TObject); private AStream, BStream, CStream,ResultStream,newstream: TMemoryStream; ArrStream: Array of TMemoryStream; procedure DecompressStream(childstream:TMemoryStream;var ResStream:TMemoryStream; nl:Boolean = false); procedure CompressStream(var childstream : array of TMemoryStream; const FText: Array of String; var ResStream:TMemoryStream); function StreamToString(Stream: TStream): String; procedure StringToStream(const AString: string; var Stream: TMemoryStream); procedure StringsToArray(const AArray : Array of String; var BArray : Array of String); { private declarations } public { public declarations } end; var Form1: TForm1; implementation {$R *.lfm} { TForm1 } function TForm1.StreamToString(Stream: TStream): String; var SL:TStringList; begin SL:=TStringList.Create; stream.Position := 0; SL.LoadFromStream(stream); result:=SL.Text; SL.Free; end; procedure TForm1.StringToStream(const AString: string; var Stream: TMemoryStream); begin Stream.Write(AString[1], Length(AString)); end; procedure TForm1.DecompressStream(childstream:TMemoryStream;var ResStream:TMemoryStream; nl:Boolean = false); var outfile : TMemoryStream; i,l,c : Integer; s:string; begin //restart if nl then childstream.Position := 0; childstream.Read(l,SizeOf(l)); //read stream ResStream := TMemoryStream.create; //copy to new stream ResStream.CopyFrom(childstream,l); end; procedure TForm1.CompressStream(var childstream : array of TMemoryStream; const FText: Array of String; var ResStream:TMemoryStream); var i,DataSize : Integer; s : String; begin for i:= 0 to Length(childstream)-1 do begin if text<>'' then begin childstream[i]:=TMemoryStream.Create; StringToStream(FText[i], childstream[i]); end; { размер стрима } DataSize := childstream[i].Size; ResStream.Write(DataSize,SizeOf(DataSize)); {упаковываем файл и сохраняем во временный файл} ResStream.CopyFrom(childstream[i], 0); childstream[i].Free; end; end; procedure TForm1.StringsToArray(const AArray : Array of String; var BArray : Array of String); var I:Integer; begin for i:=0 to Length(AArray)-1 do BArray[i] :=AArray[i]; end; procedure TForm1.Button1Click(Sender: TObject); begin ResultStream:=TMemoryStream.Create; SetLength(ArrStream,3); CompressStream(ArrStream, [memo1.Text, memo2.Text, memo3.Text], ResultStream); ResultStream.SaveToFile(ExtractFileDir(ParamStr(0))+'/11.srt'); Button3.Enabled:=true; end; procedure TForm1.Button3Click(Sender: TObject); begin DecompressStream(ResultStream,AStream,true); memo4.text:=StreamToString(AStream); DecompressStream(ResultStream,BStream,false); memo5.text:=StreamToString(BStream); DecompressStream(ResultStream,CStream,false); memo6.text:=StreamToString(CStream); end; end. п.п.с. код сложный и скорее всего кривой |