Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Blockread mal wieder (https://www.delphipraxis.net/108498-blockread-mal-wieder.html)

dazar_t 14. Feb 2008 22:25

Re: Blockread mal wieder
 
Achsoo damit bin ich doch schonmal ein stück weiter ^^

Aber in diesem Code beispielsweise ließt er immer einen Namen z.B ARCHIV_FILE_NUMMER_1 dieser name wird ja nicht immer ein byte groß sein also warum funktioniert es trotzdem ?
Delphi-Quellcode:
  BlockRead(ArchivFile.ArchivFile, SSize, SizeOf(SSize));
  // zuerst wird ausgelesen, wie groß der Dateiname ist
  SetLength(s,SSize);
  // dann wird S diese Länge zugewiesen
  BlockRead(ArchivFile.ArchivFile,s[1],SSize);
  // anschließend kann der Dateiname aus der Archivdatei
  // ausgelesen werden.

  BlockRead(ArchivFile.ArchivFile,Size,SizeOf(Size));
  // die Größe der Datei

Nuclear-Ping 15. Feb 2008 11:22

Re: Blockread mal wieder
 
Zitat:

Aber in diesem Code beispielsweise ließt er immer einen Namen z.B ARCHIV_FILE_NUMMER_1 dieser name ...
Was macht er? Schau dir den Code nochmal an. ;)

dazar_t 15. Feb 2008 12:48

Re: Blockread mal wieder
 
den ganzen code habe ich von : http://www.delphi-treff.de/tutorials...archiv/page/3/
Und da wird erst ausgelsen wie groß der datei name iss dann was der name iss und dann die datei.

Nuclear-Ping 15. Feb 2008 12:52

Re: Blockread mal wieder
 
Delphi-Quellcode:
BlockRead(ArchivFile.ArchivFile, SSize, SizeOf(SSize));
SetLength(s,SSize);
BlockRead(ArchivFile.ArchivFile,s[1],SSize);
Schau dir den Code doch nochmal an. Erst wird SSize gelesen. SSize enthält danach höchstwahrsch. die Länge des Dateinamens. Dann wird s (<- blöder Name für ne Variable - der Dateiname wahrsch.) gelesen und als Anzahl wieviel er lesen soll, wird SSize angegeben. Klingeling? ;)

dazar_t 15. Feb 2008 12:57

Re: Blockread mal wieder
 
ja aber ich verstehe nicht warum SSize danach höchstwahrsch die Länge des Dateinamens enthält
:wall: :wall: :wall: denn ich weiss nicht wieviele zeichen er ließt da er als länge ja Sizeof(SSize) angegeben hat und SSize keinen wert hat.

Nuclear-Ping 15. Feb 2008 13:24

Re: Blockread mal wieder
 
Und was hab ich paar Beiträge weiter oben geschrieben?

Zitat:

Zitat von Nuclear-Ping
SSize ist ein Byte. Folglich ist SizeOf (SSize) = 1. Also liest er ein Byte. Zusatz: Man kann statt SizeOf (SSize) auch SizeOf (Byte) schreiben. Das wäre das gleiche. Man nutzt deswegen SizeOf, um Plattformkompatibilität zu gewährleisten, da nicht 100% gewährleistet ist, dass auf allen System ein Byte immer 1 groß ist.

In deinem Beispiel oben wird die Größe der zu lesenden Bytes durch die Größe des Arrays vorgegeben. buf: array[1..4096] of byte = length(buf) = 4096.


dazar_t 15. Feb 2008 13:27

Re: Blockread mal wieder
 
hmmmm und dann schreib ich doch warum dann trotzdem immer der Name herrauskommt obwohl nur ein byte gelesen wird ^^

Nuclear-Ping 15. Feb 2008 13:50

Re: Blockread mal wieder
 
Die Datei wird wohl so aufgebaut sein:

<Länge des Namens (1 Byte) = X><Name (X Bytes groß)><Länge der Datei (wohl ein Integer = 4 Byte) = Y><Daten der Datei (Y Bytes groß)>

dazar_t 15. Feb 2008 14:10

Re: Blockread mal wieder
 
DANKE
jetzt ist mir "fast" alles klar.
Aber wenn die dateigröße z.B 104 wäre kleiner als 1 byte würde das ganze nichtmehr funktioniern oder ?

Nuclear-Ping 15. Feb 2008 14:13

Re: Blockread mal wieder
 
Ein Byte umfasst 0-255. Und damit wird auch nur die Länge des Dateinamens festgehalten. Dateinamen sind in der Regel nicht größer als 255 Zeichen. ;)

Die Dateigröße wird wohl auch nicht in Byte festgehalten werden, sondern als ein Integer, der 4 Bytes groß ist und Zahlen -2147483648 bis 2147483647 aufnehmen kann. Alternativ dazu "Cardinal", wäre das gleiche nur ohne Vorzeichen (also 0-4294967295). Siehe dazu auch die Delphi-Hilfe zum Thema "Integer-Typen".


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:05 Uhr.
Seite 2 von 3     12 3      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz