views:

167

answers:

2

Hi , in visual basic i can open a binary(exe) file with below way :

Strx$ = Space(FileLen(FileName))
Open FileName For Binary As #1
  Get #1, , Strx$
Close

in this way i can read all of binary file characters and read file content like this format :

alt text and the question is how can i open a binary(exe) file in delphi with a string format(Like image) and not 0,1(binary) format ?

Thank you!

+7  A: 

EXE files contain embedded NULL (#0) Characters. You may have problems using Strings as typically NULL is found at the end of the string. Some routines will stop working with a string once the NULL is encountered.

Having said that the following would get the contents of a file into a string.

function GetFileIntoString(FileName : String) : String;
var
 SS : TStringStream;
begin
  SS := TStringStream.Create('');   
  try
    SS.LoadFromFile(FileName);
    result := SS.DataString;
  finally
    SS.Free;
  end;
end;
Robert Love
memory leak -- you should use try/finally and .free your stringStream
glob
does it work with Delphi 2009 and higher too? (thinking of Unicode and default character encodings ...)
mjustin
Leak Fixed. In Delphi 2009 the string will be Unicode, and prior it will be Ansi. Both will load the file into the string.
Robert Love
mjustin
@mjustin is right. In D2009+, accessing the DataString will corrupt the bytes, unless you assign an 8-bit clean TEncoding object to the stream. Better to use TMemoryStream instead. Even better, use a memory mapping instead, then you do not have to read the file bytes into a separate memory block at all.
Remy Lebeau - TeamB
Why not use Byte size AnsiString or TBytes?
Warren P
+1  A: 

here are some good resources with examples too

http://delphi.about.com/od/fileio/a/fileof_delphi.htm

http://delphi.about.com/od/fileio/a/untypedfiles.htm

best regards,

Radu Barbu