![]() |
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 |
Re: Blockread mal wieder
Zitat:
|
Re: Blockread mal wieder
den ganzen code habe ich von :
![]() Und da wird erst ausgelsen wie groß der datei name iss dann was der name iss und dann die datei. |
Re: Blockread mal wieder
Delphi-Quellcode:
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? ;)
BlockRead(ArchivFile.ArchivFile, SSize, SizeOf(SSize));
SetLength(s,SSize); BlockRead(ArchivFile.ArchivFile,s[1],SSize); |
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. |
Re: Blockread mal wieder
Und was hab ich paar Beiträge weiter oben geschrieben?
Zitat:
|
Re: Blockread mal wieder
hmmmm und dann schreib ich doch warum dann trotzdem immer der Name herrauskommt obwohl nur ein byte gelesen wird ^^
|
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ß)> |
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 ? |
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. |
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