Inhalt einer Rar-Datei


Wie man den Inhalt einer RAR-Datei auflisten.

Autor: GEORGE ROBERTS

{Lass mich raten, Sie versuchen, die Dateien in dem RAR-Archiv, Liste,
Richtig? Hier ist, wie ich es tun (Dies ist rauh, da bin ich es Aufräumen
aus meiner Hand da mir es ein wenig anders behandelt):}

CONST
Errmsg:Array [0.. 5] Zeichenfolge [49] = ()
'Zugriff auf angegebene Datei kann nicht',
'Unerwartetes Dateiende',
'Unexpected Lesefehler',
'Ungültiger Header-ID gefunden',
' Kann '' t finden Sie den nächsten Eintrag im Archiv ',
'Datei ist nicht im RAR-Archiv-Format');

Methode: Array [0..21] Zeichenfolge [9] = ()
'Verzeichnis' {* Verzeichnis Markierung *}
' Unbekannt! ', {* Unbekannter Komprimierungstyp *}
'Gespeichert', {* keine Komprimierung *}
'Verpackt', {* Repeat-Byte-Komprimierung *}
'Gepresst', {* Huffman mit wiederholen-Byte-Komprimierung *}
'knirschte', {* veraltet LZW-Komprimierung *}
'Knirschte', {* LZW 9-12 Bit mit wiederholen-Byte-Komprimierung *}
'Gequetscht', {* LZW-9-13-Bit-Komprimierung *}
'Zerstoßen', {* LZW-2-13-Bit-Komprimierung *}
'Geschrumpft', {* LZW-9-13-Bit-Komprimierung *}
'Senkung der 1' {* Probabilistic Faktor 1 Kompression *}
'Senkung der 2' {* probabilistische Faktor 2 Kompression *}
'Senkung der 3' {* probabilistische Faktor 3 Komprimierung *}
'Senkung der 4' {* probabilistische Faktor 4 Kompression *}
'Eingefroren', {* modifizierte LZW/Huffman Komprimierung *}
'Implodiert', {* Shannon-Fano-Baum-Komprimierung *}
'Implodiert', {* Shannon-Fano-Baum-Komprimierung *}
'Schnellste',
'Schnell',
'Normal',
'Gute Comp',
'Best Comp');

TYP
Outrec = Datensatz {* Ausgang Informationsstruktur *}
Filename:String [255]; {* Ausgang Dateiname *}
Datum: Ganzzahl; {* Ausgabe Datum *}
Zeit: Ganzzahl; {* Ausgabe Zeit *}
Typ:Integer; {* Speichertyp-Ausgang *}
CSize:LongInt; {* Ausgabe komprimierte Größe *}
Usize:LongInt; {* Ausgang unkomprimierte Größe *}
Ende;

Rarheaderrec = Datensatz
B:Array [1..7] Byte;
Ende;
Rarfilerec = Datensatz
Packsize:LongInt;
Unpacksize:LongInt;
HostOS:byte; {0 Dos 1 os/2}
FileCRC:longint;
Mod_time:Integer;
Mod_date:Integer;
Rarver:Byte;
Methode: Byte;
Fnamesize:Integer;
Attr:LongInt;
Ende;

VAR aus: Outrec;
abgebrochen: boolean;

Prozedur emsg(message:string);
beginnen
{* Emsg - Fehlermeldung anzeigen
*}

Writeln;
Writeln ('* ' + Nachricht);
abgebrochen: = TRUE;
Ende;

Funktion Getbyte(var fp:file):char;
Var Buf:array [0..0] char;
Numread:Word;
C:char;
beginnen
Wenn (nicht abgebrochen) dann beginnen
blockread(FP,c,1,numread);
Wenn SEEK_SET = 0 dann beginnen
Schließen(FP);
emsg(errmsg[1]);
Ende;
GetByte: = c;
Ende;
Ende;

Procedure Process_RAR (Var. Fp:file);

Var Rar:rarfilerec;
RH:rarheaderrec;
RHA:Array [1..100] Byte;
Buf:Array [0..25] Byte;
H:Integer;
Anzeige: Longint;
Numread:Word;
ich, Stat: Integer;
ADD2:Word;
C:char;
hinzufügen: boolean;

beginnen

während (nicht abgebrochene) tun beginnen
{* Endlosschleife eingerichtet (Ausfahrt ist in Schleife) *}
hinzufügen: = FALSE;
blockread(FP,RH.b[1],5,numread);
Wenn SEEK_SET <> 5, dann emsg(errmsg[2]);
Wenn (abgebrochen) beenden;

> Wenn not(rh.b[3]=$74) dann zu beenden;
blockread(FP,h,2,numread);
Wenn SEEK_SET <> 2 dann emsg(errmsg[2]);
Wenn (abgebrochen) beenden;
blockread(FP,rar,sizeof(rar),numread);
Wenn SEEK_SET <> sizeof(rar) dann emsg(errmsg[2]);
Wenn (abgebrochen) beenden;
out.filename:='';
für i: = 1 rar.fnamesize do {* Dateinamen zu erhalten *}
out.filename[i]:=GetByte(FP);
out.filename[0]:=Chr(rar.fnamesize);
out.filename:=stripname(out.filename);
out.Date:=rar.mod_date;
out.Time:=rar.mod_time;
out.CSize:=rar.packsize;
out.usize:=rar.unpacksize;
RS rar.method der
$30:out.typ:=2; {* Gespeichert *}
$31:out.typ:=17; {* Verkleinert *}
$32:out.typ:=18;
$33:out.typ:=19;
$34:out.typ:=20;
$35:out.typ:=21;
sonst beginnen
out.Typ:=1; {* Unbekannt! *}
Ende;
Ende;

{Anruf an Routine, die eine Datei Liste Zeile bei Verwendung wird das
Variable}

{$I}-suchen (fp, POS (fp) + (h-(Sizeof (Rar) + 7 +
length(out.filename))); {$I+}
Wenn (Ioresult <> 0) dann emsg(errmsg[4]);
Wenn (abgebrochen) beenden;
{$I}-seek(fp,filepos(fp)+(rar.packsize)); {$I+}
Wenn (Ioresult <> 0) dann emsg(errmsg[4]);
Wenn (abgebrochen) beenden;
Ende;
Ende;

showrar(infile:string) des Verfahrens;
Var Rha:array [1..15] Byte;
C:char;
H:Word;
Numread:Word;

beginnen
Assign(FP,INFILE);
{$I}-reset(fp,1); {$I+}
Wenn Ioresult <> 0, dann Ende beginnen;

c:=GetByte(FP); {* bestimmen Sie die Art des Archivs *}
Wenn (c = $52) dann beginnen
Wenn (ord(getbyte(fp)) <>$ 61) dann emsg(errmsg[5]);
Wenn (ord(getbyte(fp)) <>$ 72) dann emsg(errmsg[5]);
Wenn (ord(getbyte(fp)) <>$ 21) dann emsg(errmsg[5]);
Wenn (ord(getbyte(fp)) <>$ 1a) dann emsg(errmsg[5]);
c:=GetByte(FP);
c:=GetByte(FP);
blockread(FP,RHA[1],5,numread); Wenn dann SEEK_SET <> 5
Abend(Abort,Next,errmsg[2]);
Wenn dann Rha [3] <>$ 73 beginnen
emsg(errmsg[2]);
Ende;
blockread(FP,h,2,numread);
Wenn SEEK_SET <> 2 dann emsg(errmsg[2]);
blockread(FP,RHA[1],6,numread);
Wenn SEEK_SET <> 6 dann emsg(errmsg[2]);
{$I}-seek(fp,filepos(fp)+(h-13)); {$I+}
Wenn (Ioresult <> 0) dann emsg(errmsg[4]);
Writeln ('Original Compress % Met' +
'Hod Datum Zeit Dateiname');
Writeln ('---------' +
'--------- -------- ------ ------------');
process_RAR(FP); {* RAR-Eintrag zu verarbeiten *}

{Ort Aufruf-Routine, die alle Summen oder nichts anzeigt
Sie können kompiliert haben}

sonst reset(fp,1) End;

Schließen(FP); {* Datei schließen *}

Ende;

Dies ist keine vollständige Einheit oder Programm, denn es ist ein Schnitt und paste aus
(Viele) verschiedene Quelldateien von mir... ;) Ich anzeigen ein Bündel von verschiedenen
Archivtypen und die Display-Routinen sind alle miteinander verflochten, also musste ich Schneiden
heraus, die RAR sind, Sie hier zu zeigen. Ich würde nicht vorschlagen, die Datei zu lesen
Byte für Byte und bei dem Versuch es zu konvertieren. Ich würde einfach etwas zu tun
Was ich hier getan habe (ich meinte, dass dies ein Beispiel... ist nicht unbedingt ein
Cut & paste Lösung) die Aufzeichnung und Blockread im Datensatz verwendet.

Hoffe, dass dies etwas hilft! ;)

George A. Roberts IV
Intuitive Bildverarbeitungssoftware
[email protected]









Inhalt einer Rar-Datei


Inhalt einer Rar-Datei : Mehreren tausend Tipps, um Ihr Leben einfacher machen.


Wie man den Inhalt einer RAR-Datei auflisten.

Autor: GEORGE ROBERTS

{Lass mich raten, Sie versuchen, die Dateien in dem RAR-Archiv, Liste,
Richtig? Hier ist, wie ich es tun (Dies ist rauh, da bin ich es Aufräumen
aus meiner Hand da mir es ein wenig anders behandelt):}

CONST
Errmsg:Array [0.. 5] Zeichenfolge [49] = ()
'Zugriff auf angegebene Datei kann nicht',
'Unerwartetes Dateiende',
'Unexpected Lesefehler',
'Ungültiger Header-ID gefunden',
' Kann '' t finden Sie den nächsten Eintrag im Archiv ',
'Datei ist nicht im RAR-Archiv-Format');

Methode: Array [0..21] Zeichenfolge [9] = ()
'Verzeichnis' {* Verzeichnis Markierung *}
' Unbekannt! ', {* Unbekannter Komprimierungstyp *}
'Gespeichert', {* keine Komprimierung *}
'Verpackt', {* Repeat-Byte-Komprimierung *}
'Gepresst', {* Huffman mit wiederholen-Byte-Komprimierung *}
'knirschte', {* veraltet LZW-Komprimierung *}
'Knirschte', {* LZW 9-12 Bit mit wiederholen-Byte-Komprimierung *}
'Gequetscht', {* LZW-9-13-Bit-Komprimierung *}
'Zerstoßen', {* LZW-2-13-Bit-Komprimierung *}
'Geschrumpft', {* LZW-9-13-Bit-Komprimierung *}
'Senkung der 1' {* Probabilistic Faktor 1 Kompression *}
'Senkung der 2' {* probabilistische Faktor 2 Kompression *}
'Senkung der 3' {* probabilistische Faktor 3 Komprimierung *}
'Senkung der 4' {* probabilistische Faktor 4 Kompression *}
'Eingefroren', {* modifizierte LZW/Huffman Komprimierung *}
'Implodiert', {* Shannon-Fano-Baum-Komprimierung *}
'Implodiert', {* Shannon-Fano-Baum-Komprimierung *}
'Schnellste',
'Schnell',
'Normal',
'Gute Comp',
'Best Comp');

TYP
Outrec = Datensatz {* Ausgang Informationsstruktur *}
Filename:String [255]; {* Ausgang Dateiname *}
Datum: Ganzzahl; {* Ausgabe Datum *}
Zeit: Ganzzahl; {* Ausgabe Zeit *}
Typ:Integer; {* Speichertyp-Ausgang *}
CSize:LongInt; {* Ausgabe komprimierte Größe *}
Usize:LongInt; {* Ausgang unkomprimierte Größe *}
Ende;

Rarheaderrec = Datensatz
B:Array [1..7] Byte;
Ende;
Rarfilerec = Datensatz
Packsize:LongInt;
Unpacksize:LongInt;
HostOS:byte; {0 Dos 1 os/2}
FileCRC:longint;
Mod_time:Integer;
Mod_date:Integer;
Rarver:Byte;
Methode: Byte;
Fnamesize:Integer;
Attr:LongInt;
Ende;

VAR aus: Outrec;
abgebrochen: boolean;

Prozedur emsg(message:string);
beginnen
{* Emsg - Fehlermeldung anzeigen
*}

Writeln;
Writeln ('* ' + Nachricht);
abgebrochen: = TRUE;
Ende;

Funktion Getbyte(var fp:file):char;
Var Buf:array [0..0] char;
Numread:Word;
C:char;
beginnen
Wenn (nicht abgebrochen) dann beginnen
blockread(FP,c,1,numread);
Wenn SEEK_SET = 0 dann beginnen
Schließen(FP);
emsg(errmsg[1]);
Ende;
GetByte: = c;
Ende;
Ende;

Procedure Process_RAR (Var. Fp:file);

Var Rar:rarfilerec;
RH:rarheaderrec;
RHA:Array [1..100] Byte;
Buf:Array [0..25] Byte;
H:Integer;
Anzeige: Longint;
Numread:Word;
ich, Stat: Integer;
ADD2:Word;
C:char;
hinzufügen: boolean;

beginnen

während (nicht abgebrochene) tun beginnen
{* Endlosschleife eingerichtet (Ausfahrt ist in Schleife) *}
hinzufügen: = FALSE;
blockread(FP,RH.b[1],5,numread);
Wenn SEEK_SET <> 5, dann emsg(errmsg[2]);
Wenn (abgebrochen) beenden;

> Wenn not(rh.b[3]=$74) dann zu beenden;
blockread(FP,h,2,numread);
Wenn SEEK_SET <> 2 dann emsg(errmsg[2]);
Wenn (abgebrochen) beenden;
blockread(FP,rar,sizeof(rar),numread);
Wenn SEEK_SET <> sizeof(rar) dann emsg(errmsg[2]);
Wenn (abgebrochen) beenden;
out.filename:='';
für i: = 1 rar.fnamesize do {* Dateinamen zu erhalten *}
out.filename[i]:=GetByte(FP);
out.filename[0]:=Chr(rar.fnamesize);
out.filename:=stripname(out.filename);
out.Date:=rar.mod_date;
out.Time:=rar.mod_time;
out.CSize:=rar.packsize;
out.usize:=rar.unpacksize;
RS rar.method der
$30:out.typ:=2; {* Gespeichert *}
$31:out.typ:=17; {* Verkleinert *}
$32:out.typ:=18;
$33:out.typ:=19;
$34:out.typ:=20;
$35:out.typ:=21;
sonst beginnen
out.Typ:=1; {* Unbekannt! *}
Ende;
Ende;

{Anruf an Routine, die eine Datei Liste Zeile bei Verwendung wird das
Variable}

{$I}-suchen (fp, POS (fp) + (h-(Sizeof (Rar) + 7 +
length(out.filename))); {$I+}
Wenn (Ioresult <> 0) dann emsg(errmsg[4]);
Wenn (abgebrochen) beenden;
{$I}-seek(fp,filepos(fp)+(rar.packsize)); {$I+}
Wenn (Ioresult <> 0) dann emsg(errmsg[4]);
Wenn (abgebrochen) beenden;
Ende;
Ende;

showrar(infile:string) des Verfahrens;
Var Rha:array [1..15] Byte;
C:char;
H:Word;
Numread:Word;

beginnen
Assign(FP,INFILE);
{$I}-reset(fp,1); {$I+}
Wenn Ioresult <> 0, dann Ende beginnen;

c:=GetByte(FP); {* bestimmen Sie die Art des Archivs *}
Wenn (c = $52) dann beginnen
Wenn (ord(getbyte(fp)) <>$ 61) dann emsg(errmsg[5]);
Wenn (ord(getbyte(fp)) <>$ 72) dann emsg(errmsg[5]);
Wenn (ord(getbyte(fp)) <>$ 21) dann emsg(errmsg[5]);
Wenn (ord(getbyte(fp)) <>$ 1a) dann emsg(errmsg[5]);
c:=GetByte(FP);
c:=GetByte(FP);
blockread(FP,RHA[1],5,numread); Wenn dann SEEK_SET <> 5
Abend(Abort,Next,errmsg[2]);
Wenn dann Rha [3] <>$ 73 beginnen
emsg(errmsg[2]);
Ende;
blockread(FP,h,2,numread);
Wenn SEEK_SET <> 2 dann emsg(errmsg[2]);
blockread(FP,RHA[1],6,numread);
Wenn SEEK_SET <> 6 dann emsg(errmsg[2]);
{$I}-seek(fp,filepos(fp)+(h-13)); {$I+}
Wenn (Ioresult <> 0) dann emsg(errmsg[4]);
Writeln ('Original Compress % Met' +
'Hod Datum Zeit Dateiname');
Writeln ('---------' +
'--------- -------- ------ ------------');
process_RAR(FP); {* RAR-Eintrag zu verarbeiten *}

{Ort Aufruf-Routine, die alle Summen oder nichts anzeigt
Sie können kompiliert haben}

sonst reset(fp,1) End;

Schließen(FP); {* Datei schließen *}

Ende;

Dies ist keine vollständige Einheit oder Programm, denn es ist ein Schnitt und paste aus
(Viele) verschiedene Quelldateien von mir... ;) Ich anzeigen ein Bündel von verschiedenen
Archivtypen und die Display-Routinen sind alle miteinander verflochten, also musste ich Schneiden
heraus, die RAR sind, Sie hier zu zeigen. Ich würde nicht vorschlagen, die Datei zu lesen
Byte für Byte und bei dem Versuch es zu konvertieren. Ich würde einfach etwas zu tun
Was ich hier getan habe (ich meinte, dass dies ein Beispiel... ist nicht unbedingt ein
Cut & paste Lösung) die Aufzeichnung und Blockread im Datensatz verwendet.

Hoffe, dass dies etwas hilft! ;)

George A. Roberts IV
Intuitive Bildverarbeitungssoftware
[email protected]


Inhalt einer Rar-Datei

Inhalt einer Rar-Datei : Mehreren tausend Tipps, um Ihr Leben einfacher machen.
Inhalt einer Rar-Datei
Wiezutun
Freunden empfehlen
  • gplus
  • pinterest

Kommentar

Einen Kommentar hinterlassen

Wertung