Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi FileStream / MemoryStream (https://www.delphipraxis.net/91216-filestream-memorystream.html)

lucius 1. Mai 2007 17:19


FileStream / MemoryStream
 
Hallo Leute,

Erstmal Ich arbeite mit Indy version 10.
Ich habe es mittels untengenannten Code geschafft Segmente von einer Binairen Datei zu downloaden und zu dekodieren nach der Orginal Datei.
Zitat:

Beispiel Segments:

eu0quj$nau$1@upload.eweka.nl
eu0qv3$nau$2@upload.eweka.nl
Delphi-Quellcode:
    for H := 0 to sm.Count - 1 do
      try
       MyTestFile :='c:\Temp\nzbtemp\test' + IntToStr(H) + '.txt';
       idNNTP1.GetBody(sm.Strings[H], idMessage1);
      finally
       for J := 0 to IdMessage1.MessageParts.Count - 1 do
     begin
 ------------------------- Ersatz durch FileStream / MemoryStream -----------------------------
      TIdAttachment(IdMessage1.MessageParts.Items[J]).SaveToFile(MyTestFile);  
      yDecoder1.InputFileList.Add('c:\Temp\nzbtemp\test' + IntToStr(H) + '.txt');
      //DeleteFile('c:\Temp\nzbtemp\test' + IntToStr(H) + '.txt');
 ---------------------------------------------------------------------------------             
     end;
    end;

  // disconnect
  try
    IdNNTP1.Disconnect;
  except
  end;
  Memo1.Lines.Add('end.');

  yDecoder1.OutputPath := 'c:\Temp\nzbtemp\';
  yDecoder1.Active := True;
Die verschiedenen Segmente werden erst auf der HD gespeichert und dan dekodiert nach der Orginal Datei.
Ich wollte dies mittels eines Streams ersetzen sodass nicht erst alle Segmente auf der HD gespeichert werden, Ich weiss der yDecoder kann auch SaveToStream und idMessage1 kann auch SaveToStream.
Ist dies moeglich?
Kann jemand mich weiterhelfen?
Besten Dank im voraus.

Gruss Lucius.

marabu 2. Mai 2007 06:53

Re: FileStream / MemoryStream
 
Guten Morgen Lucius,

du kannst einfach vor der Schleife einen MemoryStream erzeugen, in der Schleife alle Segmente dort hinein schreiben (SaveToStream) und nach der Schleife den MemoryStream dekodieren und anschließend in eine Datei wegschreiben (FileStream.CopyFrom(MemoryStream)).

Das alles ist recht einfach, aber du wirst eventuell Probleme beim Dekodieren bekommen. In den NZB-Beispielen, die ich gesehen habe, sind die Segmente nicht unbedingt in der Reihenfolge aufgeführt, die du für ein erfolgreiches Dekodieren brauchst. Jedes Segment trägt aber eine laufende Nummer als Attribut und nach diesem Attributwert musst du die Segmente zuerst ordnen, damit die zu dekodierende Binärdatei korrekt zusammengesetzt wird.

Freundliche Grüße


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:16 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz