2010-04-05 4 views
0

Problèmes avec la compression WSH et Windows.Utilisation de VB6 + WSH avec compression Windows

Mon but est de pouvoir compresser des fichiers (pas des dossiers, mais des fichiers individuels provenant de divers endroits, que j'ai stockés dans un tableau) en utilisant la compression Windows intégrée. J'utilise VB6.

Voici ma routine (code VB6):

Dim objShell 
Dim objFolder 
Set objShell = CreateObject("Shell.Application") 
Set objFolder = objShell.namespace(savePath & "\export.zip") 
' -- 
' loop through array holding files to zip 
For i = 0 To filePointer 
    objFolder.CopyHere (filesToZip(i)) 
Next 
' -- 
Set objShell = Nothing 
Set objFolder = Nothing 

Il fonctionne, mais des problèmes se posent quand il y a plus de quelques fichiers. Je commence à recevoir des erreurs de Windows (vraisemblablement, il appelle la compression trop vite, et le fichier zip est verrouillé). Je ne semble pas comprendre comment attendre jusqu'à ce que la fonction COPYHERE termine avant d'appeler le suivant pour éviter les problèmes.

Quelqu'un a-t-il une expérience avec ceci?

Merci -

+0

Est-ce Visual Basic ou VBScript? (Visual Basic! = VBScript) – Helen

Répondre

1

Vous devriez être en mesure de réaliser ce genre de synchronisation en vérifiant le nombre de fichiers dans votre dossier cible ZIP avant de passer à la prochaine itération de la boucle (comme le suggère here et here):

For i = 0 To filePointer 
    objFolder.CopyHere filesToZip(i) 

    Do Until objFolder.Items.Count = i+1 
    WScript.Sleep 100 
    Loop 
Next 
+0

Helens fonctionne sur mon PC single-core. Sur mon quadricœur, ce n'est pas le cas. Cela vous semble étrange? Tout ce que je peux faire pour cela (peut-être que les multiples noyaux rejettent la logique)? Merci. – OneNerd

+0

@OneNerd: Avez-vous des erreurs Windows ou des erreurs d'exécution de VBScript? Si ce dernier, quelle erreur obtenez-vous, sur quelle ligne etc? – Helen

+0

bien, il faut environ 1 minute pour chaque fichier à zip - c'est comme sa pendaison ou quelque chose. Je ne sais pas - je vais bricoler un peu plus - vous a donné un vote, et si je peux le faire fonctionner, marquera comme accepté. Merci. – OneNerd

Questions connexes