AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Datei binär lesen und schreiben
Thema durchsuchen
Ansicht
Themen-Optionen

Datei binär lesen und schreiben

Ein Thema von MisterNiceGuy · begonnen am 3. Okt 2007 · letzter Beitrag vom 4. Okt 2007
Antwort Antwort
Benutzerbild von MisterNiceGuy
MisterNiceGuy

Registriert seit: 1. Jul 2003
Ort: Mannheim
919 Beiträge
 
Delphi 7 Personal
 
#1

Datei binär lesen und schreiben

  Alt 3. Okt 2007, 21:01
Hi, ich suche eine Funktion um eine Datei / einen Datenstream binär auszulesen und diesen "Binär-String" wieder in eine Atei zu schreiben.

Hatte das schonmal irgendwo gefunden, aber da hatte ich wohl noch bessere Augen

Vielen Dank schonmal
Jonas
Wenn mich jemand sucht, ich bin im Kühlschrank!

Informationen über das Duale Studium
www.jofre.de
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#2

Re: Datei binär lesen und schreiben

  Alt 3. Okt 2007, 21:04
Was meinst du mit "binär lesen"?
  Mit Zitat antworten Zitat
Benutzerbild von MisterNiceGuy
MisterNiceGuy

Registriert seit: 1. Jul 2003
Ort: Mannheim
919 Beiträge
 
Delphi 7 Personal
 
#3

Re: Datei binär lesen und schreiben

  Alt 3. Okt 2007, 21:12
Also ich möchte eine Datei als String aus Nullen und Einsen darstellen.

Und eben wieder einen Solchen String als Datei schreiben.
Jonas
Wenn mich jemand sucht, ich bin im Kühlschrank!

Informationen über das Duale Studium
www.jofre.de
  Mit Zitat antworten Zitat
markusj

Registriert seit: 9. Dez 2005
Ort: Kandel
408 Beiträge
 
#4

Re: Datei binär lesen und schreiben

  Alt 3. Okt 2007, 22:04
Als (File)Stream byteweise lesen und die Bytes dann in ihre einzelnen Bits zerlegen ... einen direkten Zugriff auf die Bits gibt man dir nicht ohne Mehrarbeit ...

mfG
Markus

Nachtrag: Ich könnte mir keinen effektiveren Weg vorstellen, den Arbeitsspeicher bis zum Bersten zu Füllen, ohne davon einen Nutzen zu haben ... auf 1 Datenbyte brauchst du 8 Byte für deinen String, da is der RAM ratz-fatz voll ... ich würde immer nur einen Ausschnitt umwandeln (um genau zu sein, ein Byte^^)
Markus
  Mit Zitat antworten Zitat
Benutzerbild von MisterNiceGuy
MisterNiceGuy

Registriert seit: 1. Jul 2003
Ort: Mannheim
919 Beiträge
 
Delphi 7 Personal
 
#5

Re: Datei binär lesen und schreiben

  Alt 4. Okt 2007, 10:38
Hi also aus einem Stream lese ich mit Read(buffer,int) aber wie lese ich damit den kompletten Stream?
Ich suche also sowas:

Delphi-Quellcode:
For i := 0 to length(FileStream) do
  FileStream.Read(mybuffer,i);
Jonas
Wenn mich jemand sucht, ich bin im Kühlschrank!

Informationen über das Duale Studium
www.jofre.de
  Mit Zitat antworten Zitat
guidok

Registriert seit: 28. Jun 2007
417 Beiträge
 
#6

Re: Datei binär lesen und schreiben

  Alt 4. Okt 2007, 11:22
Naja, TStringList hat z.B. die Procedure ReadFromStream und kann damit den gesamten Stream in einen String lesen (byteweise).

Ansonsten kannst du den Stream mit Read byteweise in einer Schleife auslesen, das gelesene Byte in dein gewünschtes Format wandeln und z.B. in irgendeinen Puffer schreiben.

Zudem:

function Read(var Buffer: Type; Count: Integer): Integer; override;

Die Funktion Read erwartet auch die Angabe von Count, was der Anzahl der Byte entspricht, die aus dem Stream gelesen wird. Steht genau so in der Hilfe.
  Mit Zitat antworten Zitat
markusj

Registriert seit: 9. Dez 2005
Ort: Kandel
408 Beiträge
 
#7

Re: Datei binär lesen und schreiben

  Alt 4. Okt 2007, 12:20
Ich würde ähnlich wie mein Vorredner, entweder eine Klasse außenrum packen oder eine von TFile-/TMemoryStream ableiten.
Im übrigen würde ich wie bereits erwähnt, immer nur den Teil lesen, den du brauchst.

Leite doch einfach ein TFileStream ab, ändere die Methode Read so, dass du via inherited ein Byte liest und dann einen String mit 8 Stellen zurückgibst ...
(Nicht getestet

Delphi-Quellcode:
function read(var Buffer : String, byteCount : Integer) : Integer; //als overload deklarieren
 var
  i, Buf, count : byte;
 begin
 result := 0;
 Buffer := 0;
 repeat
  count := read(buf, 1)
  if count = 1 then
   begin
   inc(result);
   i := 1;
   while buf <> 0 do
    begin
    if odd(buf) then
     Buffer := Buffer+'1'
     else Buffer := Buffer+'0';
    inc(i);
    buf:= buf shr 1;
    end;
   while i <= 8 do
    begin
    Buffer := Buffer+'0';
    inc(i);
    end;
   end
   else break; //ausstiegsvariante 1 : wir sind am ende des streams
  until result = byteCount; //variante 2 : wir haben gelesen was zu lesen ist
 end;
mfG
Markus
Markus
  Mit Zitat antworten Zitat
Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#8

Re: Datei binär lesen und schreiben

  Alt 4. Okt 2007, 16:07
Zitat von guidok:
Naja, TStringList hat z.B. die Procedure ReadFromStream und kann damit den gesamten Stream in einen String lesen (byteweise).
....
Bei binären Daten ist eine TStringlist nichts als barer Unsinn.

Gruss Reinhard
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:51 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