Contenu d'un fichier rar


Comment faire pour lister le contenu d'un fichier RAR.

l'auteur: GEORGE ROBERTS

{Laissez-moi deviner, vous êtes en essayant de lister les fichiers dans les archives RAR,
- il correct? Ici & #39 s comment je le fais (c'est rugueux, parce que je suis à nettoyer
de ma source, parce que la mienne s'en occupe un peu différemment): }

CONST
errmsg:array[0..5] of string[49] = (
& #39 pas accéder au fichier spécifié & #39 ,
& #39 fin de fichier Inattendue & #39 ,
& #39 Inattendu erreur de lecture & #39 ,
& #39-tête non Valide ID rencontrés & #39 ,
& #39 & #39 & #39 t suivant l'entrée dans les archives & #39 ,
& #39 Fichier n'est pas dans le format d'archive RAR & #39 )

la méthode:array[0..21] of string[9] = (
& #39 Répertoire & #39 , {* Répertoire marqueur *}
& #39 Inconnu! & #39 , {* type de compression Inconnu *}
& #39 Stockées & #39 , {* Pas de compression *}
& #39 Paniers & #39 , {* Répétez l'octet de compression *}
& #39 Pressé & #39 , {* Huffman avec la répétition octet de compression *}
& #39 croqué & #39 , {* Obsolètes compression LZW *}
& #39 Croqué & #39 , { * , LZW, de 9 à 12 bits avec la répétition octet de compression *}
& #39 Écrasé & #39 , { * , LZW, 9-13 peu de compression *}
& #39 Écrasé & #39 , { * , LZW, 2-13 peu de compression *}
& #39 Rétréci & #39 , { * , LZW, 9-13 peu de compression *}
& #39 Réduit 1 & #39 , {* Probabiliste 1 facteur de compression *}
& #39 Réduit 2 & #39 , {* Probabilistes 2 facteur de compression *}
& #39 Réduit 3 & #39 , {* Probabiliste facteur de compression 3 *}
& #39 Réduit 4 & #39 , {* Probabiliste facteur 4 de compression *}
& #39 Congelés & #39 , {* Modifié LZW/compression de Huffman *}
& #39 a Implosé & #39 , {* Shannon-Fano arbre de compression *}
& #39 a Implosé & #39 , {* Shannon-Fano arbre de compression *}
& #39 plus Rapide & #39 ,
& #39 Rapide & #39 ,
& #39 Normal & #39 ,
& #39 Bonne Comp & #39 ,
& #39 Meilleures Comp & #39 )

TYPE
outrec=record {* informations de sortie de la structure *}
nom du fichier:string[255] {* nom du fichier de sortie *}
date:integer {* date de sortie *}
heure:integer {* temps de sortie *}
type:entier {* sortie type de stockage *}
csize:longint {* sortie taille compressée *}
usize:longint {* affiche la taille non compressée *}
fin

rarheaderrec=enregistrement
b:tableau[1..7] of byte
fin
rarfilerec=enregistrement
packsize:longint
unpacksize:longint
HostOS:byte { 0 dos 1 os/2 }
FileCRC:longint
mod_time:integer
mod_date:integer
rarver:octet
méthode:octet
fnamesize:integer
attr:longint
fin

VAR:outrec
abandonnée:boolean

procédure emsg(message:string)
begin
{* emsg - Afficher un message d'erreur
*}

writeln
writeln( & #39 * & #39 message)
abandonnée:=TRUE
fin

la fonction getbyte(var pf:fichier):char
var buf:array[0..0] de char
numread:mot
c:char
begin
si (pas abandonné), puis commencer
blockread(fp,c,1,numread)
si numread=0 then begin
proche(fp)
emsg(errmsg[1])
fin
getbyte:=c
fin
fin

procédure Process_RAR(var pf:fichier)

var rar:rarfilerec
hr:rarheaderrec
rha:array[1..100] of byte
buf:array[0..25] of byte
h:integer
ad:longint
numread:mot
j',stat:integer
add2:mot
c:char
ajouter:boolean

commencer

while (pas abandonnée) do begin
{* configuration de la boucle infinie (la sortie est à l'intérieur de la boucle) *}
ajouter:=FALSE
blockread(fp,rh.b[1],5,numread)
si numread<>5 alors emsg(errmsg[2])
if (avorté), puis la sortie
si non(rh.b[3]=$74), puis la sortie
blockread(fp,h,2,numread)
si numread<>2 alors emsg(errmsg[2])
if (avorté), puis la sortie
blockread(fp,rar,sizeof(rar),numread)
si numread<>sizeof(rar) puis emsg(errmsg[2])
if (abandonnée) puis la sortie
.filename:= & #39 & #39
for i:=1 to rar.fnamesize do {* obtenir le nom de fichier *}
.nom de fichier[i]:=getbyte(fp)
.nom de fichier[0]:=chr(rar.fnamesize)
.filename:=stripname (.nom de fichier)
.date:=rar.mod_date
.temps:=rar.mod_time
.csize:=rar.packsize
.usize:=rar.unpacksize
cas de rar.méthode de
$30:.typ:=2 {* Stockées *}
$31:.typ:=17 {* Réduit *}
$32:.typ:=18
$33:.typ:=19
$34:.typ:=20
$35:.typ:=21
else begin
.typ:=1 {* Inconnu! *}
fin
fin

{lieu appel à la routine qui affiche une liste de fichiers à l'aide de ce
variable}

{$I-} seek(fp,filepos(fp) (h-(sizeof(rar) 7
longueur de la (.nom de fichier)))) {$I }
if (ioresult<>0) alors emsg(errmsg[4])
if (avorté), puis la sortie
{$I-} seek(fp,filepos(fp) (rar.packsize)) {$I }
if (ioresult<>0) alors emsg(errmsg[4])
if (avorté), puis la sortie
fin
fin

procédure showrar(infile:string)
var ors:array[1..15] of byte
c:char
h:mot
numread:mot

begin
assign(fp,infile)
{$I-} reset(fp,1) {$I }
si ioresult<>0 then begin end

c:=getbyte(fp) {* déterminer le type d'archive *}
if (c=$52), puis commencer
if (ord(getbyte(fp))<>$61) puis emsg(errmsg[5])
if (ord(getbyte(fp))<>$72) puis emsg(errmsg[5])
if (ord(getbyte(fp))<>$21) puis emsg(errmsg[5])
if (ord(getbyte(fp))<>$1a) puis emsg(errmsg[5])
c:=getbyte(fp)
c:=getbyte(fp)
blockread(fp,rha[1],5,numread) si numread<>5
abend(abandon,à côté,errmsg[2])
si ors[3]<>$73 puis commencer
emsg(errmsg[2])
fin
blockread(fp,h,2,numread)
si numread<>2 alors emsg(errmsg[2])
blockread(fp,rha[1],6,numread)
si numread<>6 alors emsg(errmsg[2])
{$I-} seek(fp,filepos(fp) (h-13)) {$I }
if (ioresult<>0) alors emsg(errmsg[4])
writeln( & #39 Origine Compresser % Rencontré & #39
& #39 hod Date Heure nom de fichier & #39 )
writeln( & #39 & & & & & & & & & - & #39
& #39 & & & & - & & & & & & & & & & & & & & #39 )
process_RAR(fp) {* processus RAR entrée *}

{ lieu appel à la routine qui affiche les totaux, ou quoi que ce soit
vous pouvez avoir compilé }

à la fin le reste de réinitialisation(fp,1)

close(fp) {* fermeture du fichier *}

fin

Ce n'est pas une unité complète ou d'un programme, parce que c'est un couper-coller
(BEAUCOUP) différents fichiers source de la mienne... ) - je afficher un tas de différentes
les types d'archives et les routines d'affichage sont tous inextricablement liés, de sorte que j'ai dû couper
le RAR à vous montrer ici. Je ne voudrais pas vous suggérons de lire le fichier
octet par octet et d'essayer de le convertir. Je voudrais simplement faire quelque chose comme
ce que j'ai fait ici, (je voulais que ce soit un exemple... pas forcément
couper et coller solution) et l'utilisation de l'enregistrement et blockread dans le dossier.

Espérons que cela aide un peu! )

George A. Roberts IV
Vision Intuitive du Logiciel
[email protected]









Contenu d'un fichier rar


Contenu d'un fichier rar : Plusieurs milliers de conseils pour vous faciliter la vie.


Comment faire pour lister le contenu d'un fichier RAR.

l'auteur: GEORGE ROBERTS

{Laissez-moi deviner, vous etes en essayant de lister les fichiers dans les archives RAR,
- il correct? Ici & #39 s comment je le fais (c'est rugueux, parce que je suis a nettoyer
de ma source, parce que la mienne s'en occupe un peu differemment): }

CONST
errmsg:array[0..5] of string[49] = (
& #39 pas acceder au fichier specifie & #39 ,
& #39 fin de fichier Inattendue & #39 ,
& #39 Inattendu erreur de lecture & #39 ,
& #39-tete non Valide ID rencontres & #39 ,
& #39 & #39 & #39 t suivant l'entree dans les archives & #39 ,
& #39 Fichier n'est pas dans le format d'archive RAR & #39 )

la methode:array[0..21] of string[9] = (
& #39 Repertoire & #39 , {* Repertoire marqueur *}
& #39 Inconnu! & #39 , {* type de compression Inconnu *}
& #39 Stockees & #39 , {* Pas de compression *}
& #39 Paniers & #39 , {* Repetez l'octet de compression *}
& #39 Presse & #39 , {* Huffman avec la repetition octet de compression *}
& #39 croque & #39 , {* Obsoletes compression LZW *}
& #39 Croque & #39 , { * , LZW, de 9 a 12 bits avec la repetition octet de compression *}
& #39 Ecrase & #39 , { * , LZW, 9-13 peu de compression *}
& #39 Ecrase & #39 , { * , LZW, 2-13 peu de compression *}
& #39 Retreci & #39 , { * , LZW, 9-13 peu de compression *}
& #39 Reduit 1 & #39 , {* Probabiliste 1 facteur de compression *}
& #39 Reduit 2 & #39 , {* Probabilistes 2 facteur de compression *}
& #39 Reduit 3 & #39 , {* Probabiliste facteur de compression 3 *}
& #39 Reduit 4 & #39 , {* Probabiliste facteur 4 de compression *}
& #39 Congeles & #39 , {* Modifie LZW/compression de Huffman *}
& #39 a Implose & #39 , {* Shannon-Fano arbre de compression *}
& #39 a Implose & #39 , {* Shannon-Fano arbre de compression *}
& #39 plus Rapide & #39 ,
& #39 Rapide & #39 ,
& #39 Normal & #39 ,
& #39 Bonne Comp & #39 ,
& #39 Meilleures Comp & #39 )

TYPE
outrec=record {* informations de sortie de la structure *}
nom du fichier:string[255] {* nom du fichier de sortie *}
date:integer {* date de sortie *}
heure:integer {* temps de sortie *}
type:entier {* sortie type de stockage *}
csize:longint {* sortie taille compressee *}
usize:longint {* affiche la taille non compressee *}
fin

rarheaderrec=enregistrement
b:tableau[1..7] of byte
fin
rarfilerec=enregistrement
packsize:longint
unpacksize:longint
HostOS:byte { 0 dos 1 os/2 }
FileCRC:longint
mod_time:integer
mod_date:integer
rarver:octet
methode:octet
fnamesize:integer
attr:longint
fin

VAR:outrec
abandonnee:boolean

procedure emsg(message:string)
begin
{* emsg - Afficher un message d'erreur
*}

writeln
writeln( & #39 * & #39 message)
abandonnee:=TRUE
fin

la fonction getbyte(var pf:fichier):char
var buf:array[0..0] de char
numread:mot
c:char
begin
si (pas abandonne), puis commencer
blockread(fp,c,1,numread)
si numread=0 then begin
proche(fp)
emsg(errmsg[1])
fin
getbyte:=c
fin
fin

procedure Process_RAR(var pf:fichier)

var rar:rarfilerec
hr:rarheaderrec
rha:array[1..100] of byte
buf:array[0..25] of byte
h:integer
ad:longint
numread:mot
j',stat:integer
add2:mot
c:char
ajouter:boolean

commencer

while (pas abandonnee) do begin
{* configuration de la boucle infinie (la sortie est a l'interieur de la boucle) *}
ajouter:=FALSE
blockread(fp,rh.b[1],5,numread)
si numread<>5 alors emsg(errmsg[2])
if (avorte), puis la sortie
si non(rh.b[3]=$74), puis la sortie
blockread(fp,h,2,numread)
si numread<>2 alors emsg(errmsg[2])
if (avorte), puis la sortie
blockread(fp,rar,sizeof(rar),numread)
si numread<>sizeof(rar) puis emsg(errmsg[2])
if (abandonnee) puis la sortie
.filename:= & #39 & #39
for i:=1 to rar.fnamesize do {* obtenir le nom de fichier *}
.nom de fichier[i]:=getbyte(fp)
.nom de fichier[0]:=chr(rar.fnamesize)
.filename:=stripname (.nom de fichier)
.date:=rar.mod_date
.temps:=rar.mod_time
.csize:=rar.packsize
.usize:=rar.unpacksize
cas de rar.methode de
$30:.typ:=2 {* Stockees *}
$31:.typ:=17 {* Reduit *}
$32:.typ:=18
$33:.typ:=19
$34:.typ:=20
$35:.typ:=21
else begin
.typ:=1 {* Inconnu! *}
fin
fin

{lieu appel a la routine qui affiche une liste de fichiers a l'aide de ce
variable}

{$I-} seek(fp,filepos(fp) (h-(sizeof(rar) 7
longueur de la (.nom de fichier)))) {$I }
if (ioresult<>0) alors emsg(errmsg[4])
if (avorte), puis la sortie
{$I-} seek(fp,filepos(fp) (rar.packsize)) {$I }
if (ioresult<>0) alors emsg(errmsg[4])
if (avorte), puis la sortie
fin
fin

procedure showrar(infile:string)
var ors:array[1..15] of byte
c:char
h:mot
numread:mot

begin
assign(fp,infile)
{$I-} reset(fp,1) {$I }
si ioresult<>0 then begin end

c:=getbyte(fp) {* determiner le type d'archive *}
if (c=$52), puis commencer
if (ord(getbyte(fp))<>$61) puis emsg(errmsg[5])
if (ord(getbyte(fp))<>$72) puis emsg(errmsg[5])
if (ord(getbyte(fp))<>$21) puis emsg(errmsg[5])
if (ord(getbyte(fp))<>$1a) puis emsg(errmsg[5])
c:=getbyte(fp)
c:=getbyte(fp)
blockread(fp,rha[1],5,numread) si numread<>5
abend(abandon,a cote,errmsg[2])
si ors[3]<>$73 puis commencer
emsg(errmsg[2])
fin
blockread(fp,h,2,numread)
si numread<>2 alors emsg(errmsg[2])
blockread(fp,rha[1],6,numread)
si numread<>6 alors emsg(errmsg[2])
{$I-} seek(fp,filepos(fp) (h-13)) {$I }
if (ioresult<>0) alors emsg(errmsg[4])
writeln( & #39 Origine Compresser % Rencontre & #39
& #39 hod Date Heure nom de fichier & #39 )
writeln( & #39 & & & & & & & & & - & #39
& #39 & & & & - & & & & & & & & & & & & & & #39 )
process_RAR(fp) {* processus RAR entree *}

{ lieu appel a la routine qui affiche les totaux, ou quoi que ce soit
vous pouvez avoir compile }

a la fin le reste de reinitialisation(fp,1)

close(fp) {* fermeture du fichier *}

fin

Ce n'est pas une unite complete ou d'un programme, parce que c'est un couper-coller
(BEAUCOUP) differents fichiers source de la mienne... ) - je afficher un tas de differentes
les types d'archives et les routines d'affichage sont tous inextricablement lies, de sorte que j'ai dû couper
le RAR a vous montrer ici. Je ne voudrais pas vous suggerons de lire le fichier
octet par octet et d'essayer de le convertir. Je voudrais simplement faire quelque chose comme
ce que j'ai fait ici, (je voulais que ce soit un exemple... pas forcement
couper et coller solution) et l'utilisation de l'enregistrement et blockread dans le dossier.

Esperons que cela aide un peu! )

George A. Roberts IV
Vision Intuitive du Logiciel
[email protected]


Contenu d'un fichier rar

Contenu d'un fichier rar : Plusieurs milliers de conseils pour vous faciliter la vie.
Recommander aux amis
  • gplus
  • pinterest

Messages récents

Commentaire

Laisser un commentaire

évaluation