Autor Beitrag
Andi1982
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 497

WinXP HE
D6 Enterprise
BeitragVerfasst: Mi 26.11.03 19:54 
Hallo,
ich würde gerne den inhalt eines Zipverzeichnisses in ein Stringliste oder sonst eine Liste auslesen. Also nur die dateinamen die sich in der Zip-Datei befinden. Ich weiß nur nicht wie ich in die Zip reinkomme...

Weiß einer wie man sowas auslesen kann?

Gruß Andi

_________________
Solange die Bombe tickt ist alles in Ordnung, erst wenn sie damit aufhört wird es problematisch...
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 26.11.03 20:25 
Such dir bei Torry ein Zip Komponenten und leg los. alternativ gine auch noch ZLib, was bei Delphi bei ist, nur ist es so gut wie undokumenmtiert.
obbschtkuche
Gast
Erhaltene Danke: 1



BeitragVerfasst: Mi 26.11.03 21:09 
Hier das ist aus "Go to Delphi"

ein Paar Records
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:
36:
37:
const
  LOCAL_SIGN    = $04034B50;         // Signatur für ZIP-Datei
  CDS_SIGN      = $02014B50;
  END_MARK      = $06054B50;
type
  TFileHeader = packed record                // Datei-Header
    UnzipVersion :Word;
    Flags        :Word;
    CompressType :Word;
    Date         :Word;
    Time         :Word;
    CRC32        :LongInt;
    CompSize     :LongInt;
    UnCompSize   :LongInt;
    FileNameLen  :Word;
    ExtraLen     :Word;
  end;
  TCDSHeader = packed record               // Verzeichnis-Header
    ZipVersion   :Byte;
    ZipOS        :Byte;
    UnzipVersion :Byte;
    UnzipOS      :Byte;
    Flags        :Word;
    CompressType :Word;
    Date         :Word;
    Time         :Word;
    CRC32        :LongInt;
    CompSize     :LongInt;
    UnCompSize   :LongInt;
    FileNameLen  :Word;
    ExtraLen     :Word;
    CommentLen   :Word;
    DiskNr       :Word;
    IntFileAttr  :Word;
    ExtFileAttr  :LongInt;
    Offset       :LongInt;
  end;



und damit wird dann der Inhalt ausgelesen: (aber nur das root-Verzeichnis)

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:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
procedure ShowZipFile(Name: string; list: TStringList);
var
  ZipFile: file;
  Signature: LongInt;
  FileHeader: TFileHeader;
  FileName: array[0..255] of char;
  CDSHeader: TCDSHeader;
  FilePos: LongInt;
begin
 list.Clear;
 AssignFile(ZipFile, Name);
 try
  // Datei zum Lesen öffnen
  Reset(ZipFile, 1);
 try
  FilePos := 0;
  repeat
   // Signatur lesen
   BlockRead(ZipFile, Signature, sizeof(Signature));
   Inc(FilePos, sizeof(Signature));
   // File-Header auslesen und ans Ende der zugehörigen
   // gepackten Datei positionieren (nächste Signatur)
   if Signature = LOCAL_SIGN then
   begin
    BlockRead(ZipFile, FileHeader, sizeof(FileHeader));
    Inc(FilePos, sizeof(FileHeader));
    with FileHeader do
    begin
     Inc(FilePos, CompSize + FileNameLen + ExtraLen);
     Seek(ZipFile, FilePos);
    end;
   end
   else if Signature = CDS_SIGN then
   begin
    BlockRead(ZipFile, CDSHeader, sizeof(CDSHeader));
    Inc(FilePos, sizeof(CDSHeader));
    with CDSHeader do
    begin
     BlockRead(ZipFile, FileName, FileNameLen);
     FileName[FileNameLen] := Char(0);
     list.Add(FileName);
     Inc(FilePos, FileNameLen + ExtraLen + CommentLen);
     Seek(ZipFile, FilePos);
    end;
   end;
   // END_MARK bezeichnet Dateiende
   until Signature = END_MARK;
  finally
   CloseFile(ZipFile);
  end;
 except
  on E: EInOutError do
   case E.ErrorCode of
    5: ShowMessage('Datei kann nicht geöffnet werden - sie wird wahrscheinlich von einer anderen Anwendung benutzt!');
    100: ShowMessage('Fehler beim Lesen der Datei - Inhalt kann nicht angezeigt werden!');
   end;
 end;
end;
Andi1982 Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 497

WinXP HE
D6 Enterprise
BeitragVerfasst: Do 27.11.03 06:58 
Wow, vielen Dank für die umfangreiche Hilfe... Ich denke damit bekomme ich es hin....

Gruß andi

_________________
Solange die Bombe tickt ist alles in Ordnung, erst wenn sie damit aufhört wird es problematisch...