El contenido de un archivo rar
Cómo mostrar el contenido de un archivo RAR.
Colaborador: GEORGE ROBERTS
{déjame adivinar, usted está tratando de hacer una lista de los archivos en el archivo RAR,
correcto? Aquí & #39 s como yo lo hago (esto es duro, porque soy de limpieza
desde mi origen porque la mía se encarga de una manera un poco diferente): }
CONST
error:array[0..5] of string[49] = (
& #39 Incapaz de acceso de archivo especificado & #39 ,
& #39 final Inesperado de archivo & #39 ,
& #39 Inesperado error de lectura & #39 ,
& #39 Invalid ID de cabecera encontrado & #39 ,
& #39 & #39 & #39 t encontrar la siguiente entrada en el archivo & #39 ,
& #39 Archivo no está en RAR formato de archivo & #39 )
método:array[0..21] of string[9] = (
& #39 Directorio & #39 , {* Directorio de marcador *}
& #39 Desconocido! & #39 , {* tipo de compresión Desconocido *}
& #39 Almacenan & #39 , {* Sin compresión *}
& #39 de Pic & #39 , { * , Repetir byte de compresión *}
& #39 Exprimido & #39 , {* Huffman con repetición de bytes de compresión *}
& #39 crujía & #39 , {* Obsoleta de compresión LZW *}
& #39 Crujía & #39 , {* LZW 9 a 12 bits con repetición de bytes de compresión *}
& #39 Aplastado & #39 , {* LZW 9-13 poco de compresión *}
& #39 Aplastado & #39 , {* LZW 2-13 poco de compresión *}
& #39 Reducido & #39 , {* LZW 9-13 poco de compresión *}
& #39 Reducido 1 & #39 , {* Probabilístico 1 de factor de compresión *}
& #39 Reducido 2 & #39 , {* Probabilístico factor de 2 de compresión *}
& #39 Reducido 3 & #39 , {* Probabilístico 3 del factor de compresión *}
& #39 Reducido 4 & #39 , {* Probabilístico factor de compresión de 4 *}
& #39 Congelados & #39 , {* Modificado LZW/compresión Huffman *}
& #39 Implosionó & #39 , {* Shannon-Fano árbol de compresión *}
& #39 Implosionó & #39 , {* Shannon-Fano árbol de compresión *}
& #39 más Rápido & #39 ,
& #39 Rápido & #39 ,
& #39 Normal & #39 ,
& #39 Buena Comp & #39 ,
& #39 Mejor Comp & #39 )
TIPO
outrec=record {* salida de la estructura de la información *}
filename:string[255] {* nombre de archivo de salida *}
fecha:entero {* fecha de salida *}
tiempo:integer {* tiempo de salida *}
tipo:entero {* salida tipo de almacenamiento *}
csize:longint {* salida de tamaño comprimido *}
usize:longint {* salida de tamaño sin comprimir *}
fin
rarheaderrec=record
b:array[1..7] of byte
fin
rarfilerec=record
packsize:longint
unpacksize:longint
HostOS:byte { 0 dos 1 os/2 }
FileCRC:longint
mod_time:integer
mod_date:integer
rarver:byte
método:byte
fnamesize:integer
attr:longint
fin
VAR a cabo:outrec
abortado:boolean
procedimiento emsg(mensaje:string)
begin
{* emsg - mensaje de error en Pantalla
*}
writeln
writeln( & #39 * & #39 mensaje)
abortado:=TRUE
fin
la función de getbyte(var fp:archivo):char
var buf:array[0..0] of char
numread:la palabra
c:char
begin
si (no anulada), a continuación, empezar
blockread(fp,c,1,numread)
si numread=0 then begin
close(fp)
emsg(error[1])
fin
getbyte:=c
fin
fin
procedimiento Process_RAR(var fp:archivo)
var rar:rarfilerec
rh:rarheaderrec
rha:array[1..100] de bytes
buf:array[0..25] de bytes
h:integer
ad:longint
numread:word
yo,stat:integer
add2:word
c:char
agregar:boolean
begin
mientras (no se anula) do begin
{* establecer bucle infinito (la salida está dentro de un bucle) *}
agregar:=FALSE
blockread(fp,rh.b[1],5,numread)
si numread<>5, entonces emsg(error[2])
si (abortados), a continuación, salir
si no(rh.b[3]=$74), a continuación, salir
blockread(fp,h,2,numread)
si numread<>2 entonces emsg(error[2])
si (abortados), a continuación, salir
blockread(fp,rar,sizeof(rar),numread)
si numread<>sizeof(rar), a continuación, emsg(error[2])
si (abortados) a continuación, salida
.filename:= & #39 & #39
for i:=1 to rar.fnamesize do {* obtener el nombre de archivo *}
.nombre de archivo[i]:=getbyte(fp)
.nombre de archivo[0]:=chr(rar.fnamesize)
.filename:=stripname (.nombre de archivo)
.fecha:=rar.mod_date
.tiempo:=rar.mod_time
.csize:=rar.packsize
.usize:=rar.unpacksize
caso rar.método de
$30:.typ:=2 {* Almacena *}
$31:.typ:=17 {* Encogido *}
$32:.typ:=18
$33:fuera.typ:=19
$34:fuera.typ:=20
$35:fuera.typ:=21
else begin
.typ:=1 {* Desconocido! *}
fin
fin
{lugar de la llamada a la rutina que muestra una lista de archivos de la línea de la
variable}
{$I-} buscar(fp,filepos(fp) (h-(sizeof(rar) 7
longitud (.nombre de archivo)))) {$I }
si (ioresult<>0) entonces emsg(error[4])
si (abortados), a continuación, salir
{$I-} buscar(fp,filepos(fp) (rar.packsize)) {$I }
si (ioresult<>0) entonces emsg(error[4])
si (abortados), a continuación, salir
fin
fin
procedimiento showrar(infile:string)
var rha:array[1..15] de bytes
c:char
h:word
numread:palabra
begin
assign(fp,infile)
{$I-} reset(fp,1) {$I }
si ioresult<>0 then begin end
c:=getbyte(fp) {* determinar el tipo de archivo *}
if (c=$52), a continuación, empezar
si (ord(getbyte(fp))<>$61), a continuación, emsg(error[5])
si (ord(getbyte(fp))<>$72), a continuación, emsg(error[5])
si (ord(getbyte(fp))<>$21), a continuación, emsg(error[5])
si (ord(getbyte(fp))<>$1a), a continuación, emsg(error[5])
c:=getbyte(fp)
c:=getbyte(fp)
blockread(fp,rha[1],5,numread) si numread<>5 y
abend(abortar,la siguiente mensaje de error[2])
si rha[3]<>$73, a continuación, empezar
emsg(error[2])
fin
blockread(fp,h,2,numread)
si numread<>2 entonces emsg(error[2])
blockread(fp,rha[1],6,numread)
si numread<>6, a continuación, emsg(error[2])
{$I-} buscar(fp,filepos(fp) (h-13)) {$I }
si (ioresult<>0) entonces emsg(error[4])
writeln( & #39 Original Comprimir % Met & #39
& #39 hod Fecha Hora nombre de archivo & #39 )
writeln( & #39 & & & & & & & & & - & #39
& #39 & & & & - & & & & & & & & & & & & & & #39 )
process_RAR(fp) {* proceso RAR entrada *}
{ lugar de la llamada a la rutina que se muestra ningún totales o nada
usted puede tener compilado }
end else reset(fp,1)
close(fp) {* cerrar archivo *}
final
Esto no es una unidad completa o programa porque es un cortar y pegar de un
(MUCHOS) archivos de origen diferente de la mía... ) puedo mostrar un montón de diferentes
tipos de archivo y la pantalla rutinas están todos entrelazados, por lo que tuve que cortar
el RAR para mostrar aquí. Yo no sugeriría leer el archivo
byte por byte y tratando de convertir. Me gustaría simplemente hacer algo como
lo que he hecho aquí, (quiero decir que esto es un ejemplo... no necesariamente un
cortar y pegar solución) y utilice el registro y blockread en el registro.
Espero que esto ayude un poco! )
George A. Roberts IV
Intuitivo Software de Visión
[email protected]
El contenido de un archivo rar
El contenido de un archivo rar : Multi-millones de consejos para hacer su vida mas facil.
Como mostrar el contenido de un archivo RAR.
Colaborador: GEORGE ROBERTS
{dejame adivinar, usted esta tratando de hacer una lista de los archivos en el archivo RAR,
correcto? Aqui & #39 s como yo lo hago (esto es duro, porque soy de limpieza
desde mi origen porque la mia se encarga de una manera un poco diferente): }
CONST
error:array[0..5] of string[49] = (
& #39 Incapaz de acceso de archivo especificado & #39 ,
& #39 final Inesperado de archivo & #39 ,
& #39 Inesperado error de lectura & #39 ,
& #39 Invalid ID de cabecera encontrado & #39 ,
& #39 & #39 & #39 t encontrar la siguiente entrada en el archivo & #39 ,
& #39 Archivo no esta en RAR formato de archivo & #39 )
metodo:array[0..21] of string[9] = (
& #39 Directorio & #39 , {* Directorio de marcador *}
& #39 Desconocido! & #39 , {* tipo de compresion Desconocido *}
& #39 Almacenan & #39 , {* Sin compresion *}
& #39 de Pic & #39 , { * , Repetir byte de compresion *}
& #39 Exprimido & #39 , {* Huffman con repeticion de bytes de compresion *}
& #39 crujia & #39 , {* Obsoleta de compresion LZW *}
& #39 Crujia & #39 , {* LZW 9 a 12 bits con repeticion de bytes de compresion *}
& #39 Aplastado & #39 , {* LZW 9-13 poco de compresion *}
& #39 Aplastado & #39 , {* LZW 2-13 poco de compresion *}
& #39 Reducido & #39 , {* LZW 9-13 poco de compresion *}
& #39 Reducido 1 & #39 , {* Probabilistico 1 de factor de compresion *}
& #39 Reducido 2 & #39 , {* Probabilistico factor de 2 de compresion *}
& #39 Reducido 3 & #39 , {* Probabilistico 3 del factor de compresion *}
& #39 Reducido 4 & #39 , {* Probabilistico factor de compresion de 4 *}
& #39 Congelados & #39 , {* Modificado LZW/compresion Huffman *}
& #39 Implosiono & #39 , {* Shannon-Fano arbol de compresion *}
& #39 Implosiono & #39 , {* Shannon-Fano arbol de compresion *}
& #39 mas Rapido & #39 ,
& #39 Rapido & #39 ,
& #39 Normal & #39 ,
& #39 Buena Comp & #39 ,
& #39 Mejor Comp & #39 )
TIPO
outrec=record {* salida de la estructura de la informacion *}
filename:string[255] {* nombre de archivo de salida *}
fecha:entero {* fecha de salida *}
tiempo:integer {* tiempo de salida *}
tipo:entero {* salida tipo de almacenamiento *}
csize:longint {* salida de tamaño comprimido *}
usize:longint {* salida de tamaño sin comprimir *}
fin
rarheaderrec=record
b:array[1..7] of byte
fin
rarfilerec=record
packsize:longint
unpacksize:longint
HostOS:byte { 0 dos 1 os/2 }
FileCRC:longint
mod_time:integer
mod_date:integer
rarver:byte
metodo:byte
fnamesize:integer
attr:longint
fin
VAR a cabo:outrec
abortado:boolean
procedimiento emsg(mensaje:string)
begin
{* emsg - mensaje de error en Pantalla
*}
writeln
writeln( & #39 * & #39 mensaje)
abortado:=TRUE
fin
la funcion de getbyte(var fp:archivo):char
var buf:array[0..0] of char
numread:la palabra
c:char
begin
si (no anulada), a continuacion, empezar
blockread(fp,c,1,numread)
si numread=0 then begin
close(fp)
emsg(error[1])
fin
getbyte:=c
fin
fin
procedimiento Process_RAR(var fp:archivo)
var rar:rarfilerec
rh:rarheaderrec
rha:array[1..100] de bytes
buf:array[0..25] de bytes
h:integer
ad:longint
numread:word
yo,stat:integer
add2:word
c:char
agregar:boolean
begin
mientras (no se anula) do begin
{* establecer bucle infinito (la salida esta dentro de un bucle) *}
agregar:=FALSE
blockread(fp,rh.b[1],5,numread)
si numread<>5, entonces emsg(error[2])
si (abortados), a continuacion, salir
si no(rh.b[3]=$74), a continuacion, salir
blockread(fp,h,2,numread)
si numread<>2 entonces emsg(error[2])
si (abortados), a continuacion, salir
blockread(fp,rar,sizeof(rar),numread)
si numread<>sizeof(rar), a continuacion, emsg(error[2])
si (abortados) a continuacion, salida
.filename:= & #39 & #39
for i:=1 to rar.fnamesize do {* obtener el nombre de archivo *}
.nombre de archivo[i]:=getbyte(fp)
.nombre de archivo[0]:=chr(rar.fnamesize)
.filename:=stripname (.nombre de archivo)
.fecha:=rar.mod_date
.tiempo:=rar.mod_time
.csize:=rar.packsize
.usize:=rar.unpacksize
caso rar.metodo de
$30:.typ:=2 {* Almacena *}
$31:.typ:=17 {* Encogido *}
$32:.typ:=18
$33:fuera.typ:=19
$34:fuera.typ:=20
$35:fuera.typ:=21
else begin
.typ:=1 {* Desconocido! *}
fin
fin
{lugar de la llamada a la rutina que muestra una lista de archivos de la linea de la
variable}
{$I-} buscar(fp,filepos(fp) (h-(sizeof(rar) 7
longitud (.nombre de archivo)))) {$I }
si (ioresult<>0) entonces emsg(error[4])
si (abortados), a continuacion, salir
{$I-} buscar(fp,filepos(fp) (rar.packsize)) {$I }
si (ioresult<>0) entonces emsg(error[4])
si (abortados), a continuacion, salir
fin
fin
procedimiento showrar(infile:string)
var rha:array[1..15] de bytes
c:char
h:word
numread:palabra
begin
assign(fp,infile)
{$I-} reset(fp,1) {$I }
si ioresult<>0 then begin end
c:=getbyte(fp) {* determinar el tipo de archivo *}
if (c=$52), a continuacion, empezar
si (ord(getbyte(fp))<>$61), a continuacion, emsg(error[5])
si (ord(getbyte(fp))<>$72), a continuacion, emsg(error[5])
si (ord(getbyte(fp))<>$21), a continuacion, emsg(error[5])
si (ord(getbyte(fp))<>$1a), a continuacion, emsg(error[5])
c:=getbyte(fp)
c:=getbyte(fp)
blockread(fp,rha[1],5,numread) si numread<>5 y
abend(abortar,la siguiente mensaje de error[2])
si rha[3]<>$73, a continuacion, empezar
emsg(error[2])
fin
blockread(fp,h,2,numread)
si numread<>2 entonces emsg(error[2])
blockread(fp,rha[1],6,numread)
si numread<>6, a continuacion, emsg(error[2])
{$I-} buscar(fp,filepos(fp) (h-13)) {$I }
si (ioresult<>0) entonces emsg(error[4])
writeln( & #39 Original Comprimir % Met & #39
& #39 hod Fecha Hora nombre de archivo & #39 )
writeln( & #39 & & & & & & & & & - & #39
& #39 & & & & - & & & & & & & & & & & & & & #39 )
process_RAR(fp) {* proceso RAR entrada *}
{ lugar de la llamada a la rutina que se muestra ningun totales o nada
usted puede tener compilado }
end else reset(fp,1)
close(fp) {* cerrar archivo *}
final
Esto no es una unidad completa o programa porque es un cortar y pegar de un
(MUCHOS) archivos de origen diferente de la mia... ) puedo mostrar un monton de diferentes
tipos de archivo y la pantalla rutinas estan todos entrelazados, por lo que tuve que cortar
el RAR para mostrar aqui. Yo no sugeriria leer el archivo
byte por byte y tratando de convertir. Me gustaria simplemente hacer algo como
lo que he hecho aqui, (quiero decir que esto es un ejemplo... no necesariamente un
cortar y pegar solucion) y utilice el registro y blockread en el registro.
Espero que esto ayude un poco! )
George A. Roberts IV
Intuitivo Software de Vision
[email protected]
El contenido de un archivo rar
By Consejos Y Trucos
El contenido de un archivo rar : Multi-millones de consejos para hacer su vida más fácil.