AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Blockread mal wieder

Ein Thema von dazar_t · begonnen am 14. Feb 2008 · letzter Beitrag vom 15. Feb 2008
Antwort Antwort
Seite 2 von 3     12 3      
dazar_t

Registriert seit: 1. Dez 2007
Ort: NRW
118 Beiträge
 
Delphi 2007 Professional
 
#11

Re: Blockread mal wieder

  Alt 14. Feb 2008, 23:25
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
Daniel
  Mit Zitat antworten Zitat
Nuclear-Ping
(Gast)

n/a Beiträge
 
#12

Re: Blockread mal wieder

  Alt 15. Feb 2008, 12:22
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.
  Mit Zitat antworten Zitat
dazar_t

Registriert seit: 1. Dez 2007
Ort: NRW
118 Beiträge
 
Delphi 2007 Professional
 
#13

Re: Blockread mal wieder

  Alt 15. Feb 2008, 13:48
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.
Daniel
  Mit Zitat antworten Zitat
Nuclear-Ping
(Gast)

n/a Beiträge
 
#14

Re: Blockread mal wieder

  Alt 15. Feb 2008, 13:52
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?
  Mit Zitat antworten Zitat
dazar_t

Registriert seit: 1. Dez 2007
Ort: NRW
118 Beiträge
 
Delphi 2007 Professional
 
#15

Re: Blockread mal wieder

  Alt 15. Feb 2008, 13:57
ja aber ich verstehe nicht warum SSize danach höchstwahrsch die Länge des Dateinamens enthält
denn ich weiss nicht wieviele zeichen er ließt da er als länge ja Sizeof(SSize) angegeben hat und SSize keinen wert hat.
Daniel
  Mit Zitat antworten Zitat
Nuclear-Ping
(Gast)

n/a Beiträge
 
#16

Re: Blockread mal wieder

  Alt 15. Feb 2008, 14:24
Und was hab ich paar Beiträge weiter oben geschrieben?

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.
  Mit Zitat antworten Zitat
dazar_t

Registriert seit: 1. Dez 2007
Ort: NRW
118 Beiträge
 
Delphi 2007 Professional
 
#17

Re: Blockread mal wieder

  Alt 15. Feb 2008, 14:27
hmmmm und dann schreib ich doch warum dann trotzdem immer der Name herrauskommt obwohl nur ein byte gelesen wird ^^
Daniel
  Mit Zitat antworten Zitat
Nuclear-Ping
(Gast)

n/a Beiträge
 
#18

Re: Blockread mal wieder

  Alt 15. Feb 2008, 14:50
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ß)>
  Mit Zitat antworten Zitat
dazar_t

Registriert seit: 1. Dez 2007
Ort: NRW
118 Beiträge
 
Delphi 2007 Professional
 
#19

Re: Blockread mal wieder

  Alt 15. Feb 2008, 15:10
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 ?
Daniel
  Mit Zitat antworten Zitat
Nuclear-Ping
(Gast)

n/a Beiträge
 
#20

Re: Blockread mal wieder

  Alt 15. Feb 2008, 15:13
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".
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 12:26 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