[Irrésolu/Clos] Problème avec RenameFile()
Publié : sam. 26/nov./2022 0:44
Bonsoir à la communauté...
J'ai besoin de vos lumières (les miennes ont fini par griller
) !
je rencontre un problème avec l'instruction RenameFIle() utilisée dans une boucle dans un thread.
J'ai invariablement un retour d'erreur de "violation de partage" (Code 32 : "ERROR_SHARING_VIOLATION" récupérée via GetLastError_()).
Ma ligne de commande initiale (Note pour la compréhension du code : la référence au fichier source provenant d'une liste est utilisée avec With) :
je précise que les références aux fichiers source et cible sont correctes, que le fichier source ne possède aucun attribut ou privilège qui empêcherait son renommage et que l'un et l'autre se situent dans le même répertoire.
J'ai donc ajouté en amont et en aval quelques lignes pour déterminer d'où pouvait venir le problème :
Or, quand je lance la même instruction avec les fichiers source et cible saisis littéralement dans un nouveau projet avec pour unique ligne :
la commande fonctionne parfaitement et le fichier est renommé sans problème !
Quelqu'un aurait-il une piste ?
Merci.
J'ai besoin de vos lumières (les miennes ont fini par griller

je rencontre un problème avec l'instruction RenameFIle() utilisée dans une boucle dans un thread.
J'ai invariablement un retour d'erreur de "violation de partage" (Code 32 : "ERROR_SHARING_VIOLATION" récupérée via GetLastError_()).
Ma ligne de commande initiale (Note pour la compréhension du code : la référence au fichier source provenant d'une liste est utilisée avec With) :
Code : Tout sélectionner
Resultat=RenameFile(\AncienNomFichier(),NouveauNomFichier)
J'ai donc ajouté en amont et en aval quelques lignes pour déterminer d'où pouvait venir le problème :
Code : Tout sélectionner
; Je teste si le fichier source est utilisé par un autre processus
handle=CreateFile_(\AncienNomFichier(),#GENERIC_READ,0,#Null,#OPEN_EXISTING,#FILE_ATTRIBUTE_NORMAL,#Null)
If handle=#INVALID_HANDLE_VALUE
MessageRequester("Echec opération",Str(GetLastError_()))
Else
CloseHandle_(handle)
; ici, j'ai un retour '0' donc, normalement, le fichier n'est pas 'bloqué...
MessageRequester("Réussite opération",Str(GetLastError_()))
EndIf
; Je teste le dernier code GetLastError_() et j'obtiens '0'
MessageRequester("Test",Str(GetLastError_()))
; Je tente de renommer le fichier
Resultat=RenameFile(\AncienNomFichiers(),NouveauNomFichier)
; Ici, j'affiche le résultat et j'obtiens 0 (Echec) sur la 1e ligne et 32 (violation de partage) sur la seconde
MessageRequester("Résultat",Str(Resultat)+Chr(10)+Str(GetLastError_()))
Or, quand je lance la même instruction avec les fichiers source et cible saisis littéralement dans un nouveau projet avec pour unique ligne :
Code : Tout sélectionner
Resultat=RenameFile("\\?\D:\Ancien.txt","\\?\D:\Nouveau.txt") ; Retour Resultat=1 (Réussite)

Quelqu'un aurait-il une piste ?
Merci.