Autor Beitrag
der13geist
Hält's aus hier
Beiträge: 10

Win Vista Ultimate x86
D7 Pro, D2007
BeitragVerfasst: Do 14.02.08 23:15 
Guten Tag
Da ich in meinen Programme häufig eine mengen einzelner dateien benutze dachte ich mir es gehört zu der feinen englischen art diese in ein archiv zu packen. Da dachte ich mir mache ich mir doch das archiv selber. Ich habe auch ein Tutorial im Internet gefunden doch leider verstehe ich ein paar zeilen nicht und hoffe auf hilfe hier erstmal der Code:
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
procedure OpenArchivFile(ArchivName: string; var ArchivFile: ArchivTyp);
var I, q: Integer;
  Size: LongInt;
  AktPos: integer;
  s: string;
  SSize: byte; // Länge des Strings
begin
  ArchivFile.FileStart:=TStringList.Create;
  ArchivFile.FileNames:=TStringList.Create;

  if not FileExists(ArchivName) then Exit;

  AssignFile(ArchivFile.ArchivFile, ArchivName);
  ReSet(ArchivFile.ArchivFile,1);

  { Erste Datei }
  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

  ArchivFile.FileNames.Add(s);
  // der Dateiname
  ArchivFile.FileStart.Add(IntToStr(SSize+SizeOf(SSize)+SizeOf(Size)));
  // wo beginnen die Daten der ersten Datei?

  AktPos:=SSize+SizeOf(SSize)+SizeOf(Size)+size;
  // an welcher Stelle in der Archivdatei befinden wir uns gerade:
  // am Anfang der 2. Datei (+size)

Ich verstehe nicht was BlockRead(ArchivFile.ArchivFile, SSize, SizeOf(SSize)); bringt ?! Weil SSize ist ja keine größe zugeordnet also müsste er doch garkeinen block lesen. Genauso wie BlockRead(ArchivFile.ArchivFile,Size,SizeOf(Size));

Moderiert von user profile iconjasocul: Highlight- durch Delphi-Tags ersetzt

_________________
01 05 54 F4
blaskito
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 63

Win2003, 2008, 2012, WinXP, Win7
Delphi 6 Pers.
BeitragVerfasst: Mi 20.02.08 21:15 
Hi,

ich habe jetzt die genaue Syntax von BlockRead nicht vor Augen aber ich denke, dass SSize zu Beginn mit 0 initialisiert wurde und somit Position 0 des Archives ist - also das erste Byte - von dem ab BlockRead liest. Die Länge von SSize steht mit 1 ja fest (eben Datentyp Byte). Zusammengefasst: Lies ab Position 0 exakt 1 Byte.

Gruß aus dem Norden
blaskito