Delphi-PRAXiS
Seite 1 von 9  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Tutorial Arbeiten mit Dateien auf binärer Ebene (https://www.delphipraxis.net/172780-tutorial-arbeiten-mit-dateien-auf-binaerer-ebene.html)

Fehlersucher 22. Jan 2013 15:44

Tutorial Arbeiten mit Dateien auf binärer Ebene
 
Hallo,

wo findet man ein Tutorial wie ich mit Dateien auf binärer Ebene arbeite. Also z.B. welche Möglichkeiten es gibt Dateien binär auszulesen etc.

Gruß

Klaus01 22. Jan 2013 15:57

AW: Tutorial Arbeiten mit Dateien auf binärer Ebene
 
Hallo,

eine Datei ist immer binär abgelegt.
Wenn Du die Datei einliesst legst Du fest wie diese Daten interpretiert werden sollen.

Die kleinst Einheit die Du einlesen kannst ist ein Byte.
Das kannst Du mit read(file,b) wenn Deine Datei vom Type file of Byte ist.
Du kannst auch ein TFileStream benutzen und diesen dann byte-weise auslesen.

Grüße
Klaus

Fehlersucher 22. Jan 2013 17:02

AW: Tutorial Arbeiten mit Dateien auf binärer Ebene
 
Ich würde gerne alle möglichen Dateien binär auslesen und mich ein bisschen mehr mit dem Thema beschäftigen.

Kann man den File Stream auch in einen String schreiben, oder macht das keinen Sinn?

Was würde im String stehen? Eine Zahlenreihe mit den Ziffern 0 bis 9?

Gibt es auch ausführliche Tutorials dazu?

Gruß

p80286 22. Jan 2013 17:15

AW: Tutorial Arbeiten mit Dateien auf binärer Ebene
 
Zitat:

Zitat von Klaus01 (Beitrag 1200111)
Hallo,

eine Datei ist immer binär abgelegt.
Wenn Du die Datei einliesst legst Du fest wie diese Daten interpretiert werden sollen.

Dem ist nichts hinzuzufügen. Nur das "File of Byte" würde ich als theoretische Möglichkeit abhaken. Das Mittel der Wahl ist meiner Meinung nach TFilestream.

Was hast Du denn konkret vor?

Gruß
K-H

jfheins 22. Jan 2013 17:17

AW: Tutorial Arbeiten mit Dateien auf binärer Ebene
 
Du kannst einen Filestream in Delphi problemlos in einen Ansistring einlesen. Und es steht dann der Dateiinhalt darin. das ist vergleichbar mit dem öffnen der Datei per Notepad.

Wenn du also eine XML-Datei in den String einließt kommt wohl ungefähr sowas dabei raus:
Zitat:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>◘◙<verzeichnis>◘◙ <titel>Wikipedia Städteverzeichnis</titel>..........
(Zeilenumbrüche habe ich jetzt mal ersetzt, sehen aber so ähnlich aus)

Bei einer exe Datei ganz viele nicht darstellbare Zeichen ;-)

Luckie 23. Jan 2013 09:10

AW: Tutorial Arbeiten mit Dateien auf binärer Ebene
 
Suchst du eventuell so was?
http://michael-puff.de/Programmierun...exLoader.shtml

Fehlersucher 27. Jan 2013 13:50

AW: Tutorial Arbeiten mit Dateien auf binärer Ebene
 
Nein, ich will an die einsen und nullen einer Datei kommen und diese möglichst in einem String oder so haben.

Gruß

Sir Rufo 27. Jan 2013 13:53

AW: Tutorial Arbeiten mit Dateien auf binärer Ebene
 
Zitat:

Zitat von Fehlersucher (Beitrag 1200850)
Nein, ich will an die einsen und nullen einer Datei kommen und diese möglichst in einem String oder so haben.

Gruß

Häh? Das ist doch nur eine andere Schreibweise (im Dualsystem).

MeierZwoo 27. Jan 2013 14:07

AW: Tutorial Arbeiten mit Dateien auf binärer Ebene
 
Zitat:

Zitat von Fehlersucher (Beitrag 1200850)
Nein, ich will an die einsen und nullen einer Datei kommen und diese möglichst in einem String oder so haben.

Es gibt keine "Einsen" und "Nullen" in einer Datei (oder im RAM oder ..), sondern nur bits - und deren Wert ist als 1 (gesetzt) oder 0 (ungesetzt) definiert - aber eben auch nur definiert.

Die Darstellung eines Bytes (zB) als binär "00110001" oder Hex "31" oder dezimal 49 ist doch nur für uns doofe Menschen so gebräuchlich, weil wir sonst garnichts kapieren würden.

Wenn Du in einem String die Darstellung der Werte der bits als "0" und "1" haben möchtest, dann mußt du die Werte der einzelnen Bits in chars "0" bzw. "1" umwandeln und in den String schreiben. Gut dir eine/deine Datei in einen HexEditor an, dann siehst Du, was gemeint ist.

Wenn Du in dem String aber die Werte der Bytes haben möchtest, brauchst du doch nur das Eingelesene in den String schieben oder gleich in einen String einlesen oder eine Typumwandlung in String machen (unter Beachtung des Längensetzens des Strings).

Popov 27. Jan 2013 14:20

AW: Tutorial Arbeiten mit Dateien auf binärer Ebene
 
Zitat:

Zitat von Fehlersucher (Beitrag 1200850)
Nein, ich will an die einsen und nullen einer Datei kommen und diese möglichst in einem String oder so haben.

Also wie schon gesagt, das Laden sollte in ein String klappen. Hier ein Beispiel (wenn es ein String sein soll):

Delphi-Quellcode:
function LoadStringFromFile(AFilePath: String; var AFileString: AnsiString): Boolean;
var
  FileStream: TFileStream;
begin
  Result := False;
  if not FileExists(AFilePath) then Exit;
  FileStream := TFileStream.Create(AFilePath, fmOpenRead);
  try
    if FileStream.Size <> 0 then
    begin
      SetLength(AFileString, FileStream.Size);
      FileStream.Read(AFileString[1], FileStream.Size);
      Result := True;
    end;
  finally FileStream.Free end;
end;

function SaveStringToFile(AFilePath: String; AFileString: AnsiString): Boolean;
var
  FileStream: TFileStream;
begin
  Result := False;
  FileStream := TFileStream.Create(AFilePath, fmCreate);
  try
    if Length(AFileString) <> 0 then
    begin
      FileStream.Write(AFileString[1], Length(AFileString));
      Result := True;
    end;
  finally FileStream.Free end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Path: String;
  TestString: AnsiString;
begin
  Path := ExtractFilePath(ParamStr(0));
  LoadStringFromFile(Path + 'Datei-A.exe', TestString);
  SaveStringToFile(Path + 'Datei-B.exe', TestString);
end;
Das mit den Nullen und Einsen ist ein anderer Part. Da kannst du je nachdem die Bits eines Bytes auslesen, z. B. mit AND.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:38 Uhr.
Seite 1 von 9  1 23     Letzte »    

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