[Irrésolu/Clos] Problème avec RenameFile()

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
case
Messages : 1546
Inscription : lun. 10/sept./2007 11:13

Re: Problème avec RenameFile()

Message par case »

tu indique que tu utilise des threads, n'est il pas possible que 2 threads tentent d’accéder au même fichier ?
ImageImage
Avatar de l’utilisateur
MLD
Messages : 1124
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: Problème avec RenameFile()

Message par MLD »

Bonjour a tous
je serais a ta place ,je ferais un essais sans CloseHandle_(handle)
Je soupçonne un petit bémol dans l'arrière cuisine de windows, si tu visualise le handle d'un fichier et tu vire celui-ci et qu'ensuite t'appel ce même fichier.
Ce n'est qu'une hypothèse de ma part.
boddhi
Messages : 604
Inscription : lun. 26/avr./2010 16:14
Localisation : S 48° 52' 31'' / O 123° 23' 33''

Re: Problème avec RenameFile()

Message par boddhi »

Bonjour à tous,

@case
Non, je n'ai qu'un seul thread qui tourne ('fin je crois)
En gros, il tourne comme ça :
  • Lancement du thread
  • 1e boucle While (ExamineDirectory()/NextDirectoryEntry()) qui scanne un dossier, ou plusieurs en récursif, et qui sélectionne des fichiers selon des critères saisis par l'utilisateur et alimente une List
  • Opérations intermédiaires sur des variables, raffraîchissements de gadgets, etc... mais aucune en lien avec des commandes de fichiers
  • 2e boucle While qui renomme les fichiers
  • Arrêt du thread
Pourquoi 2 boucles au lieu d'1 (j'anticipe la question :D ) ?
1) Pour alimenter uniquement la List() en fichiers concernés par le renommage (Je travaille avec près d'une centaine de milliers de fichiers)
2) Pour connaître à l'avance le nombre de fichiers qui seront à traiter

Je lance le thread à l'extérieur de la procédure récursive, donc si j'ai bien compris le fonctionnement des threads, normalement, je n'en ai bien qu'un seul qui tourne !?

@MLD
boddhi a écrit :Néanmoins, au risque d'insister, dans mon code originel, je ne fais pas appel à cette API. J'y ai eu recours (=insérer dans mon code) que pour essayer de comprendre pourquoi l'instruction RenameFile() plante et c'est grâce à elle (même si au final elle est presque inutile) et surtout à GetLastError() que j'ai découvert que c'ést en raison de violations de partage. Comme je l'ai écrit, je ne suis pas un grand connaisseur des APIs et si je peux m'en passer, c'est tant mieux :D . Les utiliser n'est pas un réflexe systématique !

Code : Tout sélectionner

Résumé : 
;Pas d'API CreateFile_() ni CloseHandle_()
Debug GetLastError_() retourne 0
Debug RenameFile(FichierSource,FichierCible) retourne 0 => Echec
Debug GetLastError_() retourne 32 => Violation de partage
boddhi
Messages : 604
Inscription : lun. 26/avr./2010 16:14
Localisation : S 48° 52' 31'' / O 123° 23' 33''

Re: [Irrésolu/Clos] Problème avec RenameFile()

Message par boddhi »

Je n'ai pas réussi à résoudre le problème. J'ai donc retiré toute la partie faisant appel au thread pour revenir à une exécution séquentielle classique qui fonctionne parfaitement.

Fil pouvant être considéré comme clos.

Merci à tous pour votre aide et vos pistes.
Avatar de l’utilisateur
threedslider
Messages : 455
Inscription : dim. 01/juil./2018 22:38

Re: [Irrésolu/Clos] Problème avec RenameFile()

Message par threedslider »

un topic sur purept; ya peut être intéressant sur comment utiliser le thread sur ton problème, donc purept c'est un pathtracer, un rendu 3D quoi.

https://www.purebasic.fr/french/viewtop ... lit=purept

Bonne chance.

Happy coding !
boddhi
Messages : 604
Inscription : lun. 26/avr./2010 16:14
Localisation : S 48° 52' 31'' / O 123° 23' 33''

Re: [Irrésolu/Clos] Problème avec RenameFile()

Message par boddhi »

@threedslider
Merci, je vais regarder ça...
Répondre