Einzelnen Beitrag anzeigen

Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#1

Binäre Ausgabe in Konsolenfenster

  Alt 22. Feb 2003, 13:45
Ich bin gerade dabei, mir ein CGI-Programm für den Apache zu bauen, das SVG-Daten automatisch komprimiert, sprich in SVGZ-Daten umwandelt. Mein Programm öffnet dazu die Datei, die der Apache übertragen will, komprimiert den Inhalt und speichert die komprimierte Datei in einem MemoryStream. Eingabe und Verarbeitung funktioniert, damit die gute Eva aber glücklich ist, fehlt natürlich noch die Ausgabe. Und an der haperts.
Da die komprimierten Daten binär sind, kann ich zum Lesen aus dem Memory-Stream keine Strings benutzen. Also habe ich es mit einem Array of Byte versucht, das den Inhalt des Streams einliest und dann in die Standard-Ausgabe schreibt. Codemäßig sieht das so aus:

Delphi-Quellcode:
var
  InputStream: TFileStream;
  OutputStream: TMemoryStream;
  CompressionStream: ZLib.TCompressionStream;
  buf: Array of Byte;
  a: Integer;
  SVGPath: String;

begin
  WriteLn('Content-type: image/xml-svg');
  WriteLn;
  SVGPath := GetEnvVar('PATH_TRANSLATED'); //Dateiname als Apache-Umgebungsvariable
  InputStream:=TFileStream.Create(SVGPath, fmOpenRead);
  OutputStream:=TMemoryStream.Create;
  CompressionStream:=TCompressionStream.Create(clMax, OutputStream);
  CompressionStream.CopyFrom(InputStream, InputStream.Size);
  CompressionStream.Free;
  SetLength(buf,OutputStream.Size);
  OutputStream.Read(buf,OutputStream.Size);
  OutputStream.SaveToFile('c:/test.svgz'); //Datei, um erfolgreiche Komrprimierung zu bestätigen: erfolgreich
  for a := 0 to Length(buf) - 1 do write(char(buf[a])); //hier Ausgabe
  OutputStream.Free;
  InputStream.Free;
end.
Ausgegeben bekomme ich hier lauter #00. Kann mir einer sagen, warum??
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat