Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Binäre Datei in Array of Byte laden (https://www.delphipraxis.net/173322-binaere-datei-array-byte-laden.html)

SyntaxXx 17. Feb 2013 16:13

Binäre Datei in Array of Byte laden
 
Guten Tag zusammen,
ich versuche gerade eine binäre Datei in ein Array of Byte zu speichern.

Doch leider weiß ich nicht, wie ich anfangen soll.
Die Dateien die gelesen werden sollen sind max. 10MB groß.

Im Array soll die Datei also Byte für Byte eingelesen werden.

Könnt ihr mir sagen, wie ich das anstellen soll?

DeddyH 17. Feb 2013 16:19

AW: Binäre Datei in Array of Byte laden
 
Du kannst z.B. einen Stream nehmen oder die Datei mit Delphi-Referenz durchsuchenBlockRead einlesen.

Klaus01 17. Feb 2013 16:48

AW: Binäre Datei in Array of Byte laden
 
.. mit einer Instanz von TFileStream die Datei öffnen.
Mit fileStream.size die Größe der Datei ermitteln.
Mit setLength(DeinArray, Dateigröße) das Array auf die entsprechende Größe ändern.
Mit fileSize.readBuffer(DeinArray,ArrayGröße) die Datei in das Array einlesen.

Grüße
Klaus

SyntaxXx 17. Feb 2013 18:13

AW: Binäre Datei in Array of Byte laden
 
Das habe ich jetzt mal gemacht.
So sieht das jetzt bei mir aus:

Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var bArray: Array of byte;
    FileStream: TFileStream;
    myfile : file;
    i, filesizevalue: integer;
    fname: string;
begin

  FileStream := TFileStream.Create(Edit1.Text, fmOpenRead);
  setLength(bArray, FileStream.Size);
  FileStream.ReadBuffer(bArray, FileStream.Size);
  FileStream.Free;
end;
Aber wenn ich das starte, bekomme ich einen Fehler:
Erste Gelegenheit für Exception bei $00406637. Exception-Klasse $C0000005 mit Meldung 'access violation at 0x00406637: write of address 0x00190000'. Prozess Projekt1.exe (5236)


Das hier wird dann im System-Tab Rrt makiert:
FISTP QWORD PTR [EDX+ECX]

Klaus01 17. Feb 2013 18:37

AW: Binäre Datei in Array of Byte laden
 
.. versuche es mal so:

Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var bArray: Array of byte;
    FileStream: TFileStream;
    myfile : file;
    i, filesizevalue: integer;
    fname: string;
begin
  try
    try
      FileStream := TFileStream.Create(Edit1.Text, fmOpenRead);
    except
      on E:Exception do
        showMessage(E.Message);
    end;
    setLength(bArray, FileStream.Size);
    FileStream.seek(0,soFromBeginning);
    FileStream.ReadBuffer(bArray, FileStream.Size);
  finally
    FileStream.Free;
  end;
end;
Grüße
Klaus

SyntaxXx 17. Feb 2013 18:46

AW: Binäre Datei in Array of Byte laden
 
Habe ich jetzt kopiert, aber immernoch das Gleiche.

Gibt es eine Möglichkeit mit TEncoding.XXX.GetBytes() eine binäre Datei einzulesen?

Klaus01 17. Feb 2013 19:36

AW: Binäre Datei in Array of Byte laden
 
.. so sollte es gehen.

Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var bArray: Array of byte;
    FileStream: TFileStream;
begin
  try
    try
      FileStream := TFileStream.Create(Edit1.Text, fmOpenRead);
    except
      on E:Exception do
        showMessage(E.Message);
    end;
    setLength(bArray, FileStream.Size);
    FileStream.seek(0,soFromBeginning);
    FileStream.ReadBuffer(bArray[0], FileStream.Size);
  finally
    FileStream.Free;
  end;
end;
aber auch nur, wenn bArray irgendwo weiter verwendet wird.
Ansonsten wird es heraus optimiert.

Grüße
Klaus

p80286 17. Feb 2013 21:06

AW: Binäre Datei in Array of Byte laden
 
Nur bei statischen Arrays ist myarray und myarray[0] das gleiche, bei dyn arrays immer das erste Arrayelement angeben (myarray[0]).

Gruß
K-H

SyntaxXx 17. Feb 2013 21:39

AW: Binäre Datei in Array of Byte laden
 
Ok erst einmal vielen Dank.

Ich hatte jetzt eigentlich vor das Array of Byte an die Win-API "UpdateResource" zu übergeben.
Doch dann bekomme ich immer einen Fehler.

Jetzt ist die Frage, ob ich das Array einfach so übergeben kann?

Der Parameter wäre "lpData".

Hier die Funktion: http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx

p80286 18. Feb 2013 10:33

AW: Binäre Datei in Array of Byte laden
 
Da meine Glaskugel immer noch nicht geliefert wurde,
vermute ich Du bist hierüber gestolpert:
Zitat:

lpData [in, optional]
Type: LPVOID

The resource data to be inserted into the file indicated by hUpdate. If the resource is one of the predefined types, the data must be valid and properly aligned. Note that this is the raw binary data to be stored in the file indicated by hUpdate, not the data provided by LoadIcon, LoadString, or other resource-specific load functions. All data containing strings or text must be in Unicode format. lpData must not point to ANSI data.

If lpData is NULL and cbData is 0, the specified resource is deleted from the file indicated by hUpdate.



Alle Zeitangaben in WEZ +1. Es ist jetzt 09:45 Uhr.
Seite 1 von 2  1 2      

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