Bonjour, me revoilà...
Bon j'ai identifié mon erreur presque par hasard bien que j'y ai passé des heures...
L'erreur comme certains d'entre vous l'avez supposé est en fait Basique et je dirais logique. Mais quand même! L'erreur était noyée dans un empilement de procédures et fonctions spécifiques imbriquées les unes dans les autres ce qui ne la rendais pas facilement détectable car les procédures et fonctions appartiennent à des unités différentes. Mon programme pèse près de 30000 lignes maintenant. Depuis quelques temps, je ressentais le besoin de faire un audit de mon code afin de voir la portée de mes variables, mais bon...
La vieille méthode du assigneFile, read, write et closefile fonctionne donc normalement. Habituellement lorsque j'utilise cette méthode ou un stringlist, je procède à l'ouverture et à la fermeture dans la même méthode. Cependant dans ce cas afin de ne pas générer trop d'accès disques avec les ouvertures et les fermetures, j'avais écrit certaines petites fonctions qui ne géraient pas les fermetures de fichiers. Si bien que dans l'enchevêtrement des chemins utilisant ces fonctions, certaines ne géraient pas les fermetures de fichiers. j'ai schématisé le processus très simplifié sur le schéma ci-dessous:
Dans la procedure globale de 1er niveau, l'ouverture et fermeture du fichier en question est bien géré. Mais dans certains cas, il y a appel à une autre fonction de contrôle (procédure x) où je n'avais pas mis la fermeture car pour économiser une relecture du fichier. Une fermeture étant géree plus loin. Malheureusement, entre temps, une procédure Y gére une réécriture du fichier par un fichier temporaire qui devrait être renommé. C'est là que ça plantait. Erreur 32 ou erreur 183 selon où l'on cherche l'erreur.
L'erreur remonte en réalité à la procédure X qui du fait que le fichier n'a pas été fermé interdit l'écriture ou le renommage du fichier en question dans la procédure y. Le Fichier temporaire est correct mais ne peut être renommé.
Ce qui m'a posé problème, c'est que je cherchais l'erreur dans la procédure y qui était correctement écrite. Puisque je je procédais à l'initialisation de l'index de lecture du fichier puis à la fermeture. Le fait que le fichier soit non renommable (en lecture seulement) n'interdisais pas ni l'utilisation du classique assignefile, ni le reset, ni le closeFile, c'est ce qui m'a perturbé.
Voilà, je suis donc obligé de restructurer la procédure x et Y en passant soit par un ObjetListe (je tente l'écriture d'un composant:) ou autre liste que je pourrais garder en mémoire ou sauvegarder et rappeler rapidement en cas de besoin (je cherche encore la solution idéale)...
Merci à tous de m'avoir aidé....
JJ
Partager