Detecter le type d'archive (zip, ace, rar) grace au signatures

Soyez le premier à donner votre avis sur cette source.

Vue 16 452 fois - Téléchargée 1 518 fois

Description

Salut,

Alors voilà, pour un programme, je me doit supporter les types d'archives les plus courant. J'ai été chercher sur les sites des auteurs des logiciels respectifs WinRAR et WinACE leur DLL de décompression (unrar.dll et unace.dll).

Donc pour décompresser dans le format voulu, faut bien détecter le type d'abord!
Donc comme j'avais envie de mettre la main à la pate, je l'ai fait.

J'ai ouvert mon éditeur hexa, j'ai recherché les signatures des 3 formats les plus courant (selon moi, bien sur, j'aurai pu faire le GZ...) et j'ai codé donc cette fonction.

Donc si ca peut vous servir...

Source / Exemple :


In the ZIP :p

Conclusion :


Bien sur, cette source peut-être amélioré, je pense au support d'autres format (ARJ, GZ, TAR, etc...) bref.

Bien entendu, vous pouvez modifier la fonction pour qu'elle renvoit un type plutot qu'un integer, question de gout.

Bref, je pense que cette source pourra vous servir.

Mes amitiés au monde du Delphi.

[big_fury]SiZiOUS,
http://www.sbibuilder.fr.st/
http://sbibuilder.dc-france.com

PS : Evidement, si vous renommez un fichier ZIP en RAR ou ACE en ZIP, etc, ca sert à rien à part vous embrouiller vous même :D
Tout ca pour dire que c'est dans le fichier qu'on cherche l'info, pas l'extension.

Codes Sources

A voir également

Ajouter un commentaire Commentaires
SiZiOUS Messages postés 69 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 novembre 2006
27 oct. 2004 à 23:03
=)
cs_PaTaTe Messages postés 2107 Date d'inscription mercredi 21 août 2002 Statut Contributeur Dernière intervention 19 février 2021 2
27 oct. 2004 à 22:35
Merci d'avoir converti tout ca en Delphi :)
cs_grandvizir Messages postés 1106 Date d'inscription samedi 8 novembre 2003 Statut Membre Dernière intervention 3 septembre 2006 22
27 oct. 2004 à 20:26
Je traduit bêtement (j'explique après) le VB de Patate:

//++++ début ++++//
function UnZipCheckArchive(szFilename:string; imode:integer):integer; external 'unzip32';
function UnRarCheckArchive(szFilename:string; imode:integer):integer; external 'unrar32';

procedure ChercherTypeArchive(FileName:string);
var ArcCheck : string;
begin
ArcCheck:='Rien détecté';
if UnZipCheckArchive(FileName, 1)<>0 then
ArcCheck:="Archive ZIP detectée."
else
if UnrarCheckArchive(FileName, 1)<>0 then
ArcCheck:='Archive RAR detectée.';
ShowMessage(ArcCheck);
end;
//++++ fin ++++//


En fait, le passage de String à travers des appels de librairies n'est pas correctement supporté pour des raisons expliquées dans l'aide de Delphi. Il y a une astuce: String ==> PChar. On passe donc aux PChar, comme c'est souvent le cas dans les déclarations de Windows.pas. Nous obtenons donc:


//++++ début ++++//
function UnZipCheckArchive(szFilename:PChar; imode:integer):integer; external 'unzip32';
function UnRarCheckArchive(szFilename:PChar; imode:integer):integer; external 'unrar32';

procedure ChercherTypeArchive(FileName:string);
var ArcCheck : string;
begin
ArcCheck:='Rien détecté';
if UnZipCheckArchive(PChar(FileName), 1)<>0 then
ArcCheck:="Archive ZIP detectée."
else
if UnrarCheckArchive(PChar(FileName), 1)<>0 then
ArcCheck:='Archive RAR detectée.';
ShowMessage(ArcCheck);
end;
//++++ fin ++++//

Ca ne change a priori pas grand chose puisque PChar=String (enfin presque).

L'utilisation de ces fonctions semblent (et sont) la méthode la plus saine.

Notons que ces infos ne sont là qu'à titre indicatif puisque je n'ai pas les bibliothèques en question. Mais je vois la chose ainsi...
cs_PaTaTe Messages postés 2107 Date d'inscription mercredi 21 août 2002 Statut Contributeur Dernière intervention 19 février 2021 2
7 oct. 2004 à 11:42
Je crois pas puique c'est du VB6 :)
SiZiOUS Messages postés 69 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 novembre 2006
7 oct. 2004 à 06:16
Dans ce cas il te servira pour autre chose =)
Tu peux poster ta méthode sur DelphiFr apres tout ;)

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.