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.
27 oct. 2004 à 23:03
27 oct. 2004 à 22:35
27 oct. 2004 à 20:26
//++++ 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...
7 oct. 2004 à 11:42
7 oct. 2004 à 06:16
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.