|
| fRenomme() rencontre une erreur |
| Iniciado por alexion, 24,oct. 2019 15:59 - 7 respuestas |
| |
| | | |
|
| |
Miembro registrado 117 mensajes |
|
| Publicado el 24,octubre 2019 - 15:59 |
Bonjour à toutes et à tous,
Je réalise une surveillance de répertoire Windows via la fonction fSurveilleRépertoire() et je lance des traitement pour chaque ajout, modification, renommage ou suppression dans le répertoire surveillé
Le but ici est (de surveiller le répertoire (merci captain obvious mais aussi de) créer, modifier ou renommer un fichier .lock lors de chaque ajout, modification, renommage ou suppression de fichier.
Or, lorsque je tente de renommer un fichier, il me le renomme correctement mais je reçois une erreur lorsqu'il tente de renommer le fichier .lock correspondant
Ci-joint le code de ma procédure :
Procedure _ModificationsRépertoire(sNomRépertoire est une chaîne, sNomFichier est une chaîne, nTypeChangement est un entier, sParamètre)
sResAttribut est une chaîne sMessage est une chaîne sElément est une chaîne = sNomRépertoire + ["\"] + sNomFichier
SELON nTypeChangement CAS fsSuppressionFichier sMessage = ChaîneConstruit("L'élément (fichier ou répertoire) <%1> a été supprimé", sElément) CAS fsCréationFichier SI fFichierExiste(sElément) = Faux ALORS sMessage = ChaîneConstruit("Le répertoire <%1> a été ajouté", sElément) SINON SI fExtraitChemin(sElément,fExtension) <> ".lock" ALORS sMessage = ChaîneConstruit("Le fichier <%1> a été ajouté", sElément) nResCréation est un entier = fCrée(sNomRépertoire + "\" + fExtraitChemin(sNomFichier,fFichier + fExtension) + ".lock") sResAttribut = fAttribut(sNomRépertoire + "\" + fExtraitChemin(sNomFichier, fFichier+fExtension) + ".lock", "H") InitialisationFichierINI(sNomRépertoire, sNomFichier) FIN FIN CAS fsRenommage SI fFichierExiste(sElément) = Faux ALORS sMessage = ChaîneConstruit("Le répertoire <%1> a été renommé en <%2>", sParamètre, sElément) SINON SI fExtraitChemin(sElément,fExtension) <> ".lock" ALORS SI fRenomme(sNomRépertoire + "\" + sParamètre + ".lock", sElément + ".lock") = Faux ALORS Info(ErreurInfo(errMessage)) FIN sMessage = ChaîneConstruit("Le fichier <%1> a été renommé en <%2>", sParamètre, sElément) FIN FIN CAS fsModificationFichier SI fFichierExiste(sElément) = Faux ALORS sMessage = ChaîneConstruit("Le répertoire <%1> a été modifié", sElément) SINON SI fExtraitChemin(sElément,fExtension) <> ".lock" ALORS nNuméroVersion est un entier = Val(INILit("INFOBASE", "Version", "", sNomRépertoire + "\" + sNomFichier + ".lock")) nNuméroVersion += 1 INIEcrit("INFOBASE", "Version", NumériqueVersChaîne(nNuméroVersion), sNomRépertoire + "\" + sNomFichier + ".lock") sMessage = ChaîneConstruit("Le fichier <%1> a été modifié", sElément) FIN FIN AUTRE CAS dbgAssertion(Faux,"Notification inconnue") RETOUR FIN
AjouteLog(sMessage)
Et ci-joint le screenshot de mon erreur rencontrée :

Comment savoir quel processus utilise le fichier en question et comment faire pour "forcer" le renommage ?
Merci d'avanceMensaje modificado, 24,octubre 2019 - 16:01 |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 160 mensajes |
|
| Publicado el 24,octubre 2019 - 16:16 |
tu peux utiliser l'outil 'sysinternals' de Microsoft pour connaitre les processus qui utilisent le fichier je pense pas que tu peux forcer le renommage si le fichier est déjà ouvert, mais je suis pas sur attends la réponse des autres |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 4.361 mensajes |
|
| Publicado el 24,octubre 2019 - 17:24 |
Bonjour, Il est possible que FichierAprèsRenommage.txt.lock, dans ce cas, comme le précise la doc, fRenomme renvoie une erreur
-- Il y a peut être plus simple, mais, ça tourne |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 7 mensajes |
|
| Publicado el 25,octubre 2019 - 08:26 |
l'erreur indique que tu renommes un fichier dans un autre répertoire, copie et supprime ensuite
-- Christophe |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 1.640 mensajes |
|
| Publicado el 25,octubre 2019 - 10:00 |
| Si il le fichier est bloqué.. a part tuer le process en question, a ma connaissance il n'y a pas de possibilités. |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 117 mensajes |
|
| Publicado el 25,octubre 2019 - 12:26 |
j'ai trouvé où se situe mon erreur mais je bien que je comprenne le problème, je ne vois pas comment le solutionner
Lorsque je créé un fichier avec fsCréationFichier, j'ajoute le fichier dans le répertoire et créé en parallèle un fichier .lock que je remplis via la procédure "InitialisationFichierIni". Dans cette procédure, je réalise un ensemble d'instruction INIEcrit() pour remplir mon fichier.
il semblerait que ces instructions ne ferment pas mon fichier et donc je rencontre cette erreur de renommage.
Cependant, je ne vois pas comment, après avoir garni mon fichier .lock, le fermer
J'ai essayé fOuvre() - garnissage - fFerme() mais sans succès
Si quelqu'un connait mieux la fonction INIEcrit(), je l'invite à se faire connaître ^^ |
| |
| |
| | | |
|
| | |
| |
| Publicado el 25,octubre 2019 - 14:51 |
Si tu as un doute sur iniecrit tu peux coder la fonction à la main et fermer ainsi correctement ton fichier.
J'ai du code avec une tempo (2.5s) apres des iniecrit pour être sur que le fichier soit bien écrit.
Sinon pour une remarque plus générale, tu devrais créer ton fichier.lock avant de créer ton fichier.txt pour fiabiliser ton traitement (si ce n'est pas déjà le cas).
eric l.
> Le 25/10/2019 à 10:26, alexion a écrit :
j'ai trouvé où se situe mon erreur mais je bien que je comprenne le problème, je ne vois pas comment le solutionner
Lorsque je créé un fichier avec fsCréationFichier, j'ajoute le fichier dans le répertoire et créé en parallèle un fichier .lock que je remplis via la procédure "InitialisationFichierIni". Dans cette procédure, je réalise un ensemble d'instruction INIEcrit() pour remplir mon fichier.
il semblerait que ces instructions ne ferment pas mon fichier et donc je rencontre cette erreur de renommage.
Cependant, je ne vois pas comment, après avoir garni mon fichier .lock, le fermer
J'ai essayé fOuvre() - garnissage - fFerme() mais sans succès
Si quelqu'un connait mieux la fonction INIEcrit(), je l'invite à se faire connaître ^^ |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 117 mensajes |
|
| Publicado el 25,octubre 2019 - 15:14 |
je ne peux hélas pas créer le .lock avant le .txt car le .lock est créé sur base du .txt
Pour prendre un exemple concret, si je drag un fichier d'un répertoire random et le drop dans le répertoire surveillé par fSurveilleRépertoire(), c'est seulement à ce moment qu'il va créer le fichier .lock.
Et oui, je pense que je vais essayer de partir sur un fOuvre() -> fEcrit() -> fFerme() plutôt que l'utilisation de INIEcrit()
Merci pour vos réponses rapides et éclairées |
| |
| |
| | | |
|
| | | | |
| | |
|