Pb zip - Attente

cs_Zoltan67 Messages postés 91 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 25 juin 2003 - 4 juin 2003 à 14:59
cs_Zoltan67 Messages postés 91 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 25 juin 2003 - 4 juin 2003 à 17:14
Bonjour,

J'ai une application qui doit zipper plusieurs fichiers, puis les placer sur un FTP. Pour les zippe, je me sers de Winzip par une commande Shell.

Le problème, c'est que je ne sais pas comment attendre que les fichiers soient entièrement zippés avant de les envoyer sur le FTP ( fichiers volumineux... ). Je n'ai pas trop envie de faire un sleep, car je ne sais pas combien de temps exactement il faut pour zipper tous les fichiers, et ils ont une taille variable donc ce n'est pas une solution optimisée.

Merci de votre aide, et bon développement à tous

4 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
4 juin 2003 à 15:09
si tu tiens a conserver ton appel par shell , tu peux attendre que le fichier Zip soit disponible , preuve que Winzip en a finit avec lui........

ou alors , tu peux interroger le system, pour savoir si l'application (winzip) dont le pid a ete renvoyé par le shell est ou non fermée......

troisieme solution, utiliser une autre methode que l'appel via le shell , plusieurs sources sont dispo sur le site, qui appellent directment les Dll pour zipper (fais une recherche.....)

By Renfield

[mailto:thomas_reynald@msn.com mailto:thomas_reynald@msn.com]

Aucune touche n'a été bléssée lors de la saisie de ce texte.......... ;)
0
cs_Zoltan67 Messages postés 91 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 25 juin 2003 1
4 juin 2003 à 15:23
merci renfield pour la rapidité de ta réponse.
je suis un peu obligé d'utiliser Winzip, je fais un stage et la boite a acheté Winzip pour mon projet, donc si je ne l'utilise pas...
je pense que je vais essayer de mettre en oeuvre la seconde solution, mais comment fais-tu pour vérifier si le pid d'une application est encore actif ?
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
4 juin 2003 à 16:48
pas de probleme , cree un nouveau module, et places y ce code.....

Option Explicit

Private Declare Function OpenProcess Lib "Kernel32.dll" (ByVal dwDesiredAccessas As Long, ByVal bInheritHandle As Long, ByVal dwProcId As Long) As Long
Private Const SYNCHRONIZE = &H100000

Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Private Const INFINITE = &HFFFF

Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long

Public Sub ShellAndWait(ByVal ProgramName As String, ByVal WindowStyle As VbAppWinStyle)
    Dim pid As Long
    Dim hProcess As Long

    'si une erreur surviens lors de l'appel du programme
    On Error GoTo GestErrors
    'on demarre le programme, en recuperant l'identifiant
    pid = Shell(ProgramName, WindowStyle)
    On Error GoTo 0

    'on recupere le handle du process, par rapport au pid
    hProcess = OpenProcess(SYNCHRONIZE, 0, pid) 'SYNCHRONIZE permet dindiquer qu'on attends la fermeture
    If hProcess <> 0 Then ' si on a bien recupere le handle
        'on attends
        Call WaitForSingleObject(hProcess, INFINITE) 'on pourrait mettre un TimeOut......
        Call CloseHandle(hProcess) 'on libere le handle
    End If

Exit Sub
GestErrors:
    Call MsgBox("Erreur de démarrage du programme :" & vbCrLf & ProgramName & vbCrLf & Err.Description, vbOKOnly Or vbCritical, "Erreur")
End Sub


il te suffit alors de faire appel a ShellAndWait au lieu de Shell......

By Renfield

[mailto:thomas_reynald@msn.com mailto:thomas_reynald@msn.com]

Aucune touche n'a été bléssée lors de la saisie de ce texte.......... ;)
0
cs_Zoltan67 Messages postés 91 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 25 juin 2003 1
4 juin 2003 à 17:14
Viens ici que je t'embrasse !!!!
C'est tellement ympa, non seulement tu réponds rapidement, mais plus tu fournis le code tout préparé tout chaud.
Mille merci à toi
0
Rejoignez-nous