Stuck with streaming file to string: illegal stream image
11:55 25 Oct 2013

I (very) recently started playing with Lazarus/Free Pascal, and I’m a little stuck with reading files with TMemoryStream and its streaming kind.

I’m trying to write a simple base64 encoder, that can encode strings of text, or files (like images and WAVs) then use it in HTML and JavaScript.

The following code compiles great but I get EReadError Illegal stream image when trying to load a file. I’ll include the working string only procedure for reference:

procedure TForm1.TextStringChange(Sender: TObject);
    begin
    Memo1.Lines.Text := EncodeStringBase64(TextString.Text);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
   Memo1.Lines.Text := '';
   Form1.BorderIcons :=  [biSystemMenu,biMinimize];
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
    if OpenDialog1.Execute then
    begin
     filename := OpenDialog1.Filename;
     stream := TMemoryStream.Create;
       try
         StrStream := TStringStream.Create(s);
           try
              stream.LoadFromFile(filename);
              stream.Seek(0, soFromBeginning);
              ObjectBinaryToText(stream, StrStream);
              StrStream.Seek(0, soFromBeginning);
              Memo1.Lines.Text := EncodeStringBase64(StrStream.DataString);
           finally
              StrStream.Free;
           end;
       finally
           stream.Free;
       end;
    end;
end;

Can anyone help me out?

delphi freepascal lazarus memorystream