Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Problem mit dynamischen Array (https://www.delphipraxis.net/89744-problem-mit-dynamischen-array.html)

bono_82 5. Apr 2007 08:29


Problem mit dynamischen Array
 
Hallo,

ich will eine Datei per FileStream byteweise auslesen, habe allerdings
folgendes Problem beim Arbeiten mit einem dynamischen Array.

Deklaration:
Delphi-Quellcode:
Data_Buffer: array of byte;
Verwendung (z.B. die ersten 512 Byte auslesen):
Delphi-Quellcode:
str := VisuFilePath+VisuFileName+'.dat';
VisuFile :=   TFileStream.Create(str,fmShareDenyWrite);
SetLength(Data_Buffer,512);
VisuFile.Position := 0;
VisuFile.Read(Data_Buffer,512);
Ich bekomme so einfach nichts aus dem Stream gelesen. Das ganze funktioniert mit einem statischen Array
allerdings wunderbar. Ich finde einfach keinen Fehler.
Wäre schön wenn mir jemand helfen könnte

Gruß!

TonyR 5. Apr 2007 08:35

Re: Problem mit dynamischen Array
 
Wozu brauchst du überhaupt ein dyn. Array? In dem Code-Schnipsel weist du ihm eine feste Länge zu (also immer 512) ... da kann man das doch auch mit einem statischen Array mach, oder???

Und hast du bedacht, dass, wenn das Array 512 groß ist, das der Index von 0-511 geht? (Kann ja sein, dass beim Auslesen von dem Array dann irgendein Fehler passiert) :gruebel:

Flocke 5. Apr 2007 08:39

Re: Problem mit dynamischen Array
 
Dynamische Arrays sind da wie dynamische Strings: wenn du sie für einen untypisierten Parameter übergibst, solltest du das erste Element benutzen. In deinem Fall also:
Delphi-Quellcode:
VisuFile.Read(Data_Buffer[0], 512);

Tyrael Y. 5. Apr 2007 08:39

Re: Problem mit dynamischen Array
 
Versuch es mal so

Delphi-Quellcode:
VisuFile.Read(Pointer(Data_Buffer)^,512);

bono_82 5. Apr 2007 08:58

Re: Problem mit dynamischen Array
 
Danke!

Beide Varianten...

Delphi-Quellcode:
VisuFile.Read(Pointer(Data_Buffer)^,512);

VisuFile.Read(Data_Buffer[0],512);
funktionieren.

Ist im Nachhinein auch logisch. Also, besten Dank!


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:24 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