ZIPPER UN FICHIER EN UTILISANT LA FONCTION DE COMPRESSION INTÉGRÉE À WINDOWS XP
bremondpierrejean
Messages postés39Date d'inscriptionsamedi 24 juillet 2004StatutMembreDernière intervention 6 janvier 2007
-
6 janv. 2007 à 09:59
AramisII
Messages postés3Date d'inscriptionmardi 2 mars 2010StatutMembreDerniè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.
AramisII
Messages postés3Date d'inscriptionmardi 2 mars 2010StatutMembreDerniè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és168Date d'inscriptionvendredi 9 janvier 2004StatutMembreDernière intervention28 juillet 20091 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és33Date d'inscriptionmercredi 1 mars 2006StatutMembreDernière intervention24 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és3Date d'inscriptionmardi 2 mars 2010StatutMembreDerniè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"
Baddante
Messages postés33Date d'inscriptionmercredi 1 mars 2006StatutMembreDernière intervention24 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és1812Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention26 octobre 20102 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és168Date d'inscriptionvendredi 9 janvier 2004StatutMembreDernière intervention28 juillet 20091 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és2126Date d'inscriptionmercredi 21 août 2002StatutContributeurDernière intervention19 février 20212 7 janv. 2007 à 05:09
Je pense que via les APIs, la chose est possible :)
bremondpierrejean
Messages postés39Date d'inscriptionsamedi 24 juillet 2004StatutMembreDerniè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és2126Date d'inscriptionmercredi 21 août 2002StatutContributeurDernière intervention19 février 20212 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és39Date d'inscriptionsamedi 24 juillet 2004StatutMembreDerniè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
2 mars 2010 à 15:04
Merci pour cette source d'aides....
2 mars 2010 à 13:05
2 mars 2010 à 13:01
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+
2 mars 2010 à 11:36
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
20 avril 2007 à 15:48
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
8 janv. 2007 à 18:03
Cela dit, si quelqu'un trouve la dll en question et les APIs à utiliser, je suis preneur !
@+
8 janv. 2007 à 12:29
>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).
7 janv. 2007 à 05:09
6 janv. 2007 à 11:53
Je suis désolé, mais ton commentaire m'est-il destiné ?
Appel ou pas "WSH" je voudrais juste comprendre et progresser
Merci
6 janv. 2007 à 11:35
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 !
6 janv. 2007 à 09:59
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