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

Soyez le premier à donner votre avis sur cette source.

Vue 15 922 fois - Téléchargée 1 438 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
Messages postés
69
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
29 novembre 2006

=)
Messages postés
2106
Date d'inscription
mercredi 21 août 2002
Statut
Contributeur
Dernière intervention
15 novembre 2020
2
Merci d'avoir converti tout ca en Delphi :)
Messages postés
1106
Date d'inscription
samedi 8 novembre 2003
Statut
Membre
Dernière intervention
3 septembre 2006
18
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...
Messages postés
2106
Date d'inscription
mercredi 21 août 2002
Statut
Contributeur
Dernière intervention
15 novembre 2020
2
Je crois pas puique c'est du VB6 :)
Messages postés
69
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
29 novembre 2006

Dans ce cas il te servira pour autre chose =)
Tu peux poster ta méthode sur DelphiFr apres tout ;)
Afficher les 21 commentaires

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.