IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

attente fin exécution ou création fichier


Sujet :

WinDev

  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    335
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 335
    Par défaut attente fin exécution ou création fichier
    Bonjour,

    En windev 5.5 comment vérifier et attendre qu'un traitement a bien fini de créer un fichier ?

    Je teste la date avec fdate(nomfic) qui renvoi la date du fichier ou -1 (une chaine) si le fichier est ouvert ou en accès mais parfois cela ne marche pas.

    Il passe à la suite en croyant que le fichier est ok mais le traitement suivant ne trouve pas le fichier.

    Cela arrive par exemple quand j'utilise 7za.exe pour créer une archive .zip ou bien pdf24 pour créer un .pdf

    Peut-être que ces programme travaillent en tache de fond ou avec des buffers ?

    Une idée ?

  2. #2
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 247
    Par défaut
    Je ne sais pas si tu as accès au traitement qui crée le fichier.
    Si oui, voici comment on a procédé chez nous pour résoudre ça. (ce n'était pas du Windev, mais la solution est générale)
    On a le traitement long qui crée le fichier, et après ce traitement, on a ajouté une étape qui crée un tout petit fichier 'drapeau'.
    Et ce qu'on teste dans l'autre traitement, c'est : le fichier 'drapeau' est-il là ?
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  3. #3
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 299
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 299
    Par défaut
    Citation Envoyé par lubinfo Voir le message
    En windev 5.5 comment vérifier et attendre qu'un traitement a bien fini de créer un fichier ?

    Je teste la date avec fdate(nomfic) qui renvoi la date du fichier ou -1 (une chaine) si le fichier est ouvert ou en accès mais parfois cela ne marche pas.

    Il passe à la suite en croyant que le fichier est ok mais le traitement suivant ne trouve pas le fichier.

    Cela arrive par exemple quand j'utilise 7za.exe pour créer une archive .zip ou bien pdf24 pour créer un .pdf
    Hello,
    peux-tu nous montrer le code qui lance 7za.exe et ce que tu fais juste après ?

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko :zen:

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    335
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 335
    Par défaut
    Bonjour,

    Un peux plus de détail : (précision importante : je suis en windev version 5.5)

    Historiquement je créé un batch prg.bat que je lançais avec ddelance(prg.bat,ddeinactif,vrai)

    Mais comme je voulais me débarrasser de la fenêtre dos qui s'ouvrait j'ai créé un prg.vbs qui lance le prg.bat
    J'appelle le prg.vbs par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    LigneCmd="wscript.exe "+"prg.vbs"+" //B //Nologo "+"prg.bat"
    ddelance(LigneCmd,ddeinactif,vrai)
    Le prg.vbs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    If WScript.Arguments.Count = 0 Then
        WScript.Echo "Erreur : Aucun fichier batch"
        WScript.Quit
    End If
    nomBat = WScript.Arguments(0)
    Set oWShell = CreateObject("Wscript.Shell") 
    oWShell.Run """" & nomBat & """", 0, False 
    Set oWShell = Nothing
    Je voulais continuer d'utiliser prg.bat car cela ma permet de débugger et de voir exactement ce qui est lancé et même de lancer le prg.bat à la main et ne pas créer directement un prg.vbs

    Exemple de contenu de prg.bat pour zipper un répertoire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    7za.exe a -tzip Fic_Zippé.zip RepAZipper
    Donc par exemple après le lancement du prg.vbs je dois être sûr que 7za.exe a bien fini de créer le fic_zippé.zip

    Donc j'utilise par exemple la méthode suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Procédure AttendFic(NomFic)
    wwTest est une chaine
    tantque wwTest="-1"
     multitache(-100)
     wwTest=fdate(NomFic)
    FIN
    Le code s'exécute bien, il attend de pouvoir lire la date du fichier mais lorsque je veux utiliser le fichier dans la suite du programme il n'est pas trouvé alors qu'il existe bien.
    J'ai aussi testé avec fOuvre c'est idem.

    Je pense que dans le cas de 7za.exe il doit créer le .zip en tâche de fond ou dans un buffer ?
    Ou bien c'est une mauvaise utilisation de multitache() de ma part ?
    Je ne voudrais pas ajouter des temporisations très longues pour rien.

    J'ai un peu le même problème mais là de manière aléatoire avec la création d'un .pdf avec l'imprimante virtuelle pdf24.
    L'attente de la bonne création du .pdf dit ok mais si on veux l'utiliser juste après il est pas détecté.

    Désolé si je suis un peu 'brouillon' dans mes explications ou si ma méthode vous parait peu 'orthodoxe' !

  5. #5
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 299
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 299
    Par défaut
    A tester l'utilisation de l'API CreateProcessA (sous réserve car je n'ai pas de XP et de windev 5.5) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    API_CreateProcessA est une API "CreateProcessA" de "kernel32.dll"
    API_WaitForSingleObject est une API "WaitForSingleObject" de "kernel32.dll"
    API_CloseHandle est une API "CloseHandle" de "kernel32.dll"
    // STARTUPINFO
    SI_cb est un entier
    SI_lpReserved est un entier
    SI_lpDesktop est un entier
    SI_lpTitle est un entier
    SI_dwX est un entier
    SI_dwY est un entier
    SI_dwXSize est un entier
    SI_dwYSize est un entier
    SI_dwXCountChars est un entier
    SI_dwYCountChars est un entier
    SI_dwFillAttribute est un entier
    SI_dwFlags est un entier
    SI_wShowWindow est un entier
    SI_cbReserved2 est un entier
    SI_lpReserved2 est un entier
    SI_hStdInput est un entier
    SI_hStdOutput est un entier
    SI_hStdError est un entier
     
    // PROCESS_INFORMATION
    PI_hProcess est un entier
    PI_hThread est un entier
    PI_dwProcessId est un entier
    PI_dwThreadId est un entier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    PROCEDURE ExecuteInvisibleEtAttend(cmd est une chaîne)
     
    // Initialisation STARTUPINFO
    SI_cb = 68
    SI_dwFlags = 1
    SI_wShowWindow = 0  // SW_HIDE
     
    // CREATE_NO_WINDOW = 0x08000000
    res = API_CreateProcessA(0, &cmd, 0, 0, 0, 0x08000000, 0, 0, &
                             SI_cb, &
                             PI_hProcess)
     
    SI res = 0 ALORS
        Info("Erreur lors de l'exécution : " + cmd)
        RETOUR
    FIN
     
    // Attendre la fin du processus
    API_WaitForSingleObject(PI_hProcess, -1)
     
    // Nettoyage
    API_CloseHandle(PI_hProcess)
    API_CloseHandle(PI_hThread)
    Exemples d'exécution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    cmd est une chaîne = "7za.exe a ""c:\backup\site.zip"" ""c:\site\*.*"""
    ExecuteInvisibleEtAttend(cmd)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    cmd est une chaîne = "pdf24.exe -print ""c:\doc\rapport.doc"" -output ""c:\doc\rapport.pdf"""
    ExecuteInvisibleEtAttend(cmd)
    Normalement les codes sont compatibles windows XP

    [EDIT] Attention j'ai mis à jour le premier code qui n'était pas bon
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko :zen:

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    335
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 335
    Par défaut
    Merci @JurassicPorc, cela pourra m'inspirer pour une autre façon de faire.

    Entre temps si je modifie la ligne :

    oWShell.Run """" & nomBat & """", 0, False
    par
    oWShell.Run """" & nomBat & """", 0, True

    dans mon .vbs cela le force à attendre la fin de l'exécution et cela marche pour le cas 7za.exe

Discussions similaires

  1. [debutant]attente l'excution d'une action
    Par mehdi_swatch dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 22/01/2007, 15h26
  2. Attente de copie complète de fichier
    Par Kloun dans le forum Access
    Réponses: 2
    Dernier message: 25/08/2006, 18h37
  3. [C#] Attente fin de thread
    Par ekinox17 dans le forum Windows Forms
    Réponses: 7
    Dernier message: 18/05/2006, 16h52
  4. [Unix KSH] Ajout caractère fin de ligne dans fichier
    Par -COil- dans le forum Autres langages
    Réponses: 1
    Dernier message: 04/05/2006, 17h06
  5. Enregistrer le temps d'excution dans un fichier
    Par Ickou dans le forum Linux
    Réponses: 8
    Dernier message: 02/03/2006, 17h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo