AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Binäre Datei in Array of Byte laden
Thema durchsuchen
Ansicht
Themen-Optionen

Binäre Datei in Array of Byte laden

Ein Thema von SyntaxXx · begonnen am 17. Feb 2013 · letzter Beitrag vom 18. Feb 2013
Antwort Antwort
Seite 1 von 2  1 2      
SyntaxXx

Registriert seit: 14. Dez 2008
328 Beiträge
 
Delphi XE4 Architect
 
#1

Binäre Datei in Array of Byte laden

  Alt 17. Feb 2013, 17:13
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?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#2

AW: Binäre Datei in Array of Byte laden

  Alt 17. Feb 2013, 17:19
Du kannst z.B. einen Stream nehmen oder die Datei mit Delphi-Referenz durchsuchenBlockRead einlesen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.771 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Binäre Datei in Array of Byte laden

  Alt 17. Feb 2013, 17:48
.. 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
Klaus
  Mit Zitat antworten Zitat
SyntaxXx

Registriert seit: 14. Dez 2008
328 Beiträge
 
Delphi XE4 Architect
 
#4

AW: Binäre Datei in Array of Byte laden

  Alt 17. Feb 2013, 19:13
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]
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.771 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Binäre Datei in Array of Byte laden

  Alt 17. Feb 2013, 19:37
.. 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
Klaus
  Mit Zitat antworten Zitat
SyntaxXx

Registriert seit: 14. Dez 2008
328 Beiträge
 
Delphi XE4 Architect
 
#6

AW: Binäre Datei in Array of Byte laden

  Alt 17. Feb 2013, 19:46
Habe ich jetzt kopiert, aber immernoch das Gleiche.

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

Geändert von SyntaxXx (17. Feb 2013 um 19:52 Uhr)
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.771 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Binäre Datei in Array of Byte laden

  Alt 17. Feb 2013, 20:36
.. 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
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#8

AW: Binäre Datei in Array of Byte laden

  Alt 17. Feb 2013, 22:06
Nur bei statischen Arrays ist myarray und myarray[0] das gleiche, bei dyn arrays immer das erste Arrayelement angeben (myarray[0]).

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
SyntaxXx

Registriert seit: 14. Dez 2008
328 Beiträge
 
Delphi XE4 Architect
 
#9

AW: Binäre Datei in Array of Byte laden

  Alt 17. Feb 2013, 22:39
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
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#10

AW: Binäre Datei in Array of Byte laden

  Alt 18. Feb 2013, 11:33
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.
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 21:40 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