Zipper un fichier en utilisant la fonction de compression intégrée à windows xp

Soyez le premier à donner votre avis sur cette source.

Snippet vu 18 471 fois - Téléchargée 22 fois

Contenu du snippet

Il y a quelques temps déjà, j'ai été confronté au besoin de compresser des fichiers depuis mon code VB et j'ai pû glané quelques informations sur le Net afin de pouvoir réutiliser la fonction "Send to a zipfile"; fonction intégrée dans Windows XP.

Ce code fonctionne pour VB tel quel et pour VBA et VBS avec peut-être quelques légères adaptations.

Source / Exemple :


Public Sub ZMakeZIPFile(ByVal sZIPFileName, ByVal sFileName)

Dim oShell As Object
Dim oZip As Object

   Open sZIPFileName For Output As #1

   Print #1, Chr$(80) & Chr$(75) & Chr$(5) & Chr$(6) & String(18, 0)

   Close #1

   ' Copy the file in the compressed folder

   Set oShell = CreateObject("Shell.Application")
   Set oZip = oShell.Namespace(sZIPFileName)

   oZip.CopyHere sFileName

   ' Keep script waiting until Compressing is done

   Do Until oZip.Items.Count = 1
      DoEvents
   Loop

   Set oZip = Nothing
   Set oShell = Nothing

End Sub

A voir également

Ajouter un commentaire

Commentaires

bremondpierrejean
Messages postés
39
Date d'inscription
samedi 24 juillet 2004
Statut
Membre
Dernière intervention
6 janvier 2007
-
Salut,
Merci pour ton code
J'appele ton code ainsi : ZMakeZIPFile "d:\essai.zip", "d:\text.txt"
1) - est ce que c'est bon selon toi ?
2) - le code boucle sur le "do -- loop" et ne s'arrête jamais

peut tu m'expliquer pourquoi ?
Merci
cs_PaTaTe
Messages postés
1878
Date d'inscription
mercredi 21 août 2002
Statut
Contributeur
Dernière intervention
7 janvier 2019
-
Arretez avec vos appels de WSH !

Ca fait débutant, ca fait dépendre le programme de certains fichiers (sans eux le prgramme ne fonctionnera pas) et ensuite, non négligeable, pas mal de commandes WHS titillent les antivus.

A proscrire donc !
bremondpierrejean
Messages postés
39
Date d'inscription
samedi 24 juillet 2004
Statut
Membre
Dernière intervention
6 janvier 2007
-
Bonjour "Patate"
Je suis désolé, mais ton commentaire m'est-il destiné ?
Appel ou pas "WSH" je voudrais juste comprendre et progresser

Merci
cs_PaTaTe
Messages postés
1878
Date d'inscription
mercredi 21 août 2002
Statut
Contributeur
Dernière intervention
7 janvier 2019
-
Je pense que via les APIs, la chose est possible :)
cavo789
Messages postés
168
Date d'inscription
vendredi 9 janvier 2004
Statut
Membre
Dernière intervention
28 juillet 2009
-
Bonjour.

>le code boucle sur le "do -- loop" et ne s'arrête jamais

Ce n'est pas normal. Pour simplifier le code, j'ai retiré certains contrôles. Ainsi, il est bien évident que le fichier à compresser (soit D:\Text.txt chez toi) doit exister.

L'objectif du do--loop est de vérifier dans le fichier ZIP que le fichier à compresser est bien présent.

Patate : je veux bien mais je n'ai jamais trouvé cette possibilité. Es-tu sûr qu'une telle API existe ?

Je veux bien ne pas être dépendant de WSH mais l'option "Send to a ZIP File" est disponible dans le menu Send to de Windows Explorer et c'est cette fonction qui est ici reprise dans mon code. Si tu possèdes la convention d'appel d'une hypothétique fonction de l'API, je suis vraiment preneur car je suis d'accord avec ce que tu écris (dépendance).

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.