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
By commentfaire
Contenu d'un fichier rar : Plusieurs milliers de conseils pour vous faciliter la vie.