ZIPPER UN FICHIER EN UTILISANT LA FONCTION DE COMPRESSION INTÉGRÉE À WINDOWS XP

bremondpierrejean Messages postés 39 Date d'inscription samedi 24 juillet 2004 Statut Membre Dernière intervention 6 janvier 2007 - 6 janv. 2007 à 09:59
AramisII Messages postés 3 Date d'inscription mardi 2 mars 2010 Statut Membre Dernière intervention 2 mars 2010 - 2 mars 2010 à 15:04
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/40998-zipper-un-fichier-en-utilisant-la-fonction-de-compression-integree-a-windows-xp

AramisII Messages postés 3 Date d'inscription mardi 2 mars 2010 Statut Membre Dernière intervention 2 mars 2010
2 mars 2010 à 15:04
C'est vrai, tres ancien mais comme j'en avais besoin et que c'etait incomplet, je me suis permis d'ajouter un commentaire qui pourait aider d'autres personnes comme moi, programmant un outil et faisant tres peu de phylosophie de programmation... ;-)))
Merci pour cette source d'aides....
cavo789 Messages postés 168 Date d'inscription vendredi 9 janvier 2004 Statut Membre Dernière intervention 28 juillet 2009 1
2 mars 2010 à 13:05
5 Janvier 2007; tout cela ne nous rajeunit pas. Vous avez été déterré une vielle source ;-)
Baddante Messages postés 33 Date d'inscription mercredi 1 mars 2006 Statut Membre Dernière intervention 24 février 2008
2 mars 2010 à 13:01
Bonjour,

pour répondre à Patate: "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 !"

En quoi ça fait débutant, c'est une DLL ocx (c:\Windows\System32\wshom.ocx) toujours livré dans la dernière version de windows (Win 7 pro v.5.8), les versions serveurs win2000 et suivant. Aucun déploiement d'ocx puisque de base dans l'OS, choix du langage de scripting /.vbs (vbscript), .js (javascript).

Et pour les "Pros" intégration dans MS Office via VBA, et tous langage gérant les ActiveX.
Bien sûre pour les "Pros" comme Violent_Ken vous pouvez toujours utiliser les APIS, (mais il faut évidement trouver la doc, vérifier si c'est libre de tous droits (Copyright), puis faire un programme d'install en général et là, il faut gérer les versions de DLLs (DLL HELL terme Microsoftien pour descendre une techno qu'il a lui même inventé !

Attention à l'usage dans un VBA (appel du Shell "CreateObject("Shell.Application")" dans un programme VBA, je pense qu'il y a de gros risque qu'un antivirus trouve cela suspect.

L'avis d'un non "Pro".
A+
AramisII Messages postés 3 Date d'inscription mardi 2 mars 2010 Statut Membre Dernière intervention 2 mars 2010
2 mars 2010 à 11:36
Bonjour,

Pour VBA Excel 2007, ce code fonctionne très bien pour autant que l'on rajoute (sinon boucle à l'infini) :
- la reference "Microsoft Shell Controls and automation"
- et modifier 3 lignes :
Dim oShell As Shell 'important car Object ne fonctionne pas...
# Set oShell = CreateObject("Shell.Application")
# oShell.Namespace(sZIPFileName).copyHere sFileName
Donc plus besoin de "oZip"

Source : http://social.msdn.microsoft.com/Forums/en-US/isvvba/thread/0263175a-351d-443e-813a-3205d6a9a42d

Bon courage à tous
Baddante Messages postés 33 Date d'inscription mercredi 1 mars 2006 Statut Membre Dernière intervention 24 février 2008
20 avril 2007 à 15:48
Salut,

moi aussi j'ai chercher à l'utiliser voici le code qui marche en VBscript / shell / wbs pour faire plaisir à PATATE ;+))
Enfin si vous voulez savoir d'ou viens cette version zip :
(Inner Media, Inc) http://www.innermedia.com/nxpr-micro.html

Code VBS : (le premier qui le transforme en VBA ou VB gagne une tringle à rideau !!!)

Const ForReading 1, ForWriting 2, ForAppending = 8
Dim Source, Destination, MyHex, MyBinary, i
Dim oShell, oApp, oFolder, oCTF, oFile
Dim oFileSys
Source = "D:\SRVDOS"
Destination = "C:\SRVDOS.zip"
MyHex = _
Array(80, 75, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
For i = 0 To UBound(MyHex)
MyBinary = MyBinary & Chr(MyHex(i))
Next
Set oShell = CreateObject("WScript.Shell")
Set oFileSys = CreateObject("Scripting.FileSystemObject")
'Creation du zip
Set oCTF = oFileSys.CreateTextFile(Destination, True)
oCTF.Write MyBinary
oCTF.Close
Set oCTF = Nothing
Set oApp = CreateObject("Shell.Application")
Set oFolder = oApp.NameSpace(Source)
If Not oFolder Is Nothing Then _
oApp.NameSpace(Destination).CopyHere oFolder.Items
wScript.Sleep 5000
Set oFile = Nothing
On Error Resume Next ' pas très beau hein !
Do While (oFile Is Nothing)
'Attention: provoque une erreur 70 si un des fichiers à zipper
'est toujours ouvert.
Set oFile = oFileSys.OpenTextFile(Destination, ForAppending, False)
If Err.Number <> 0 Then
Err.Clear
wScript.Sleep 3000
End If
Loop
Set oFile = Nothing
Set oFileSys = Nothing
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
8 janv. 2007 à 18:03
...et j'ajouterais également que c'est beaucoup moins rapide que par API ;)

Cela dit, si quelqu'un trouve la dll en question et les APIs à utiliser, je suis preneur !
@+
cavo789 Messages postés 168 Date d'inscription vendredi 9 janvier 2004 Statut Membre Dernière intervention 28 juillet 2009 1
8 janv. 2007 à 12:29
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).
cs_PaTaTe Messages postés 2126 Date d'inscription mercredi 21 août 2002 Statut Contributeur Dernière intervention 19 février 2021 2
7 janv. 2007 à 05:09
Je pense que via les APIs, la chose est possible :)
bremondpierrejean Messages postés 39 Date d'inscription samedi 24 juillet 2004 Statut Membre Dernière intervention 6 janvier 2007
6 janv. 2007 à 11:53
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 2126 Date d'inscription mercredi 21 août 2002 Statut Contributeur Dernière intervention 19 février 2021 2
6 janv. 2007 à 11:35
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
6 janv. 2007 à 09:59
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
Rejoignez-nous