Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Bonjour,
Voilà je développe sous PB12. (mon poste est sous windows 7)
Je génére des flux pdf contenant plusieurs pages et dont le nombre de pages est inscrit dans le nom.
Seulement cette dernière information s'est avéré fausse, du coup j'utilise un exécutable en parallèle PDFTK qui ouvre le pdf et me donne (via un fichier texte qu'il génére) le bon nombre de pages. Il ne me reste plus après qu'a renommer mon flux avec le bon nombre de pages.
Lorsque je n'ai pas beaucoup de flux (fichiers pdf) tout va bien mais lorsque j'en ai un peu plus (environs 10 pdf dont certains de plus de 100 pages) là ca commence à dérailler.
En pas à pas détaillé ce second cas marche très bien mais pas en exécution normale.
Aussi je pense que le soucis se produit au niveau du renommage. En effet je ne peux pas renommer un fichier si une instance est ouverte dessus, je pense qu'il doit se produire une sorte de lock sur le fichier et que c'est cela qui m'empêche de renommer (copier) mon fichier.
Aussi ma question est là suivante : sauriez-vous svp si je peux savoir (et si oui comment) si une instance est ouverte sur un fichier (de type pdf) ?
J'ai fait plusieurs recherches au préalable mais à ce jour je n'ai pas trouvé de solutions :-(
En vous remerciant de votre aide,
Nath.
Hors ligne
Tu peux essayer un FileOpen("fichier", StreamMode!, LockReadWrite!) : le LockReadWrite! demande un accès exclusif au fichier. Si le fichier est utilisé par un autre process, le FileOpen échouera.
Il suffit de tester ça en boucle, ou mieux dans un timer : tant que l'ouverture échoue (valeur de retour = -1), tu réessaies plus tard. Un fois que ça réussit (retour > -1) tu refermes le fichier et tu peux continuer ton traitement (renommage)
Hors ligne
si tu utilises "FileMove" pourquoi ne pas simplement tester le résultat et en cas d'erreur reprendre l'opération au bout d'un petit laps de temps ?
Hors ligne
Bonjour,
Tu peux également utiliser la librairie "runandwait" disponible sur le site : http://www.topwizprogramming.com/freeco … dwait.html.
Elle te permet de lancer un programme externe et d'attendre que le "process" soit terminer avant de continuer.
Hors ligne