VB6 FSO CreateFolder erreur 58 (already exists) alors qu'il n'existe pas

Fermé
Herve_be Messages postés 1015 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 10 mars 2024 - 15 juin 2020 à 11:37
Herve_be Messages postés 1015 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 10 mars 2024 - 5 août 2020 à 09:12
Bonjour,
Je voudrais créer un répertoire en utilisant ce code
Dim fPath As New FileSystemObject
If fPath.FolderExists(App.Path & "\Templates") Then fPath.DeleteFolder (App.Path & "\Templates"), True
DoEvents ' donc "Templates" n'existe pas
fPath.CreateFolder (App.Path & "\Templates")
DoEvents
If fPath.FolderExists(App.Path & "\Templates") Then ' donc "Templates" existe et est vide
     fPath.CreateFolder (App.Path & "\Templates\" & FName) ' ==> erreur 58 !

FName est un string qui contient le nom du sous-répertoire à créer.
La plupart du temps ceci fonctionne correctement, parfois sur certains PC ça ne fonctionne pas, je ne comprends pas pourquoi, et vous ?
A voir également:

8 réponses

yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 1 471
15 juin 2020 à 14:23
bonjour, peut-être pourrais-tu vérifier si le dossier existe avant de le créer?
0
Herve_be Messages postés 1015 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 10 mars 2024 8
15 juin 2020 à 14:39
Il me sembler que c'est ce que je fais, regarde mon code
si "\Templates" existe je le supprime
je crée "\Templates"
si "\Templates" existe (donc il est vide puisque je viens de le créer) alors
je crée le sous-folder "\Templates\" & FName ==> erreur 58 !
0
yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 1 471
15 juin 2020 à 15:05
CreateFolder donne une erreur. A ta place, je serais curieux de vérifier ce qu'en pense FolderExists.
que vaut FName?
0
Herve_be Messages postés 1015 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 10 mars 2024 8
15 juin 2020 à 15:21
Comme indiqué dans mon premier message, FName est un string qui contient le nom du sous-répertoire à créer.

Je ne comprends pas ta réponse
si le folder "Templates" existe je le supprime, pas d'erreur sur cette ligne, donc il n'existe pas ou plus
je crée le folder "Templates", pas d'erreur sur cette ligne donc il existe et est vide puisque je viens de le créer
si le folder "Templates" existe je crée le sous-folder Fname dans "Templates" ==> erreur 58
0
yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 1 471
15 juin 2020 à 15:30
Je vois bien ce que ton programme fait avec FName, et ce que tu supposes qu'il contient.
FName est une variable qui contient une valeur. Quelle est cette valeur quand l'erreur se produit?

Par ailleurs, je suggère d'utiliser FolderExists avant d’appeler CreateFolder, afin de vérifier si CreateFolder et FolderExists sont d'accord sur l'existence du dossier. Sois actif, modifie ton programme, ajoute du diagnostic, cela ne peut que t'aider.
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
Modifié le 15 juin 2020 à 15:43
Ce que te demandes yg_be (salutations au passage), c'est de vérifier le tout.
1- vérifier l'existence de ton sous-dossier
2- vérifier l'existence de ton fichier.
On ne fait, ici, que supposer.
VB6 n'est plus maintenu depuis longtemps maintenant, et, déjà sous win 2000, il y avait plein de bugs...

Vérifies le tout avec la fonction Dir() peut-être :

Dim fPath As New FileSystemObject
If fPath.FolderExists(App.Path & "\Templates") Then fPath.DeleteFolder (App.Path & "\Templates"), True
DoEvents ' donc "Templates" n'existe pas
fPath.CreateFolder (App.Path & "\Templates")
DoEvents
MsgBox Dir(App.Path & "\Templates\")
MsgBox Dir(App.Path & "\Templates\" & FName)
If fPath.FolderExists(App.Path & "\Templates") Then ' donc "Templates" existe et est vide
     fPath.CreateFolder (App.Path & "\Templates\" & FName) ' ==> erreur 58 !


ça devrait t'indiquer où se situe l'erreur, si toutefois il y en a une...
0
Herve_be Messages postés 1015 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 10 mars 2024 8
15 juin 2020 à 16:00
Fname peut contenir une des valeurs suivantes
Alpheus
Aqua Illumination
Aqua Medic
Aquanest
Arcadia
ATI
Divers
DsunY
Ecotech
Eshine Aquabeauty
Evergrow
Giesemann
Maxspect
Orphek
Rak-Tech
Vertex
c'est à dire la liste des sous-répertoires qu'il est sensé créer.

Je ne peux pas vérifier avec Dir chez les 4.791 utilisateurs sachant que l'erreur s'est produite chez 2 d'entre eux, chez moi ça fonctionne très bien.
J'ai ajouté le nom du folder qu'il tente de créer dans le message d'erreur 58, ainsi je saurai au moins duquel il s'agit.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Herve_be Messages postés 1015 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 10 mars 2024 8
Modifié le 3 août 2020 à 10:07
Bonjour,
J'ai à nouveau ponctuellement la même erreur alors que la plupart du temps tout fonctionne.
Je rappelle mon code
Dim sh As Object
Dim fPath As New FileSystemObject
If fPath.FolderExists(App.Path & "\Templates") Then fPath.DeleteFolder (App.Path & "\Templates"), True   ' Destruction complète du dossier et des fichiers qu'il contient
DoEvents
fPath.CreateFolder (App.Path & "\Templates")   ' Création du dossier vide
DoEvents
If Not fPath.FolderExists(App.Path & "\Templates") Then   ' Vérifier si le dossier a bien été créé
      MsgBox ("Impossible de créer le répertoire " & App.Path & "\Templates"), vbExclamation
Else
      fPath.CreateFolder (App.Path & "\Templates\" & Rootitem.Name) ' => erreur 58
App.Path & "\Templates\" & Rootitem.Name = "C:\AQUA\Templates\Aquanest"

58 signifie "File already exists" : pourquoi survient-elle lors de la création d'un répertoire ?
0
yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 1 471
3 août 2020 à 16:52
as-tu ajouté le code avec les dir, de façon à avoir plus d'information en cas d'erreur?
si c'est une problème intermittent qui se résout tout seul, il suffit peut-être, en cas d'erreur, d'attendre et de réessayer?
0
Herve_be Messages postés 1015 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 10 mars 2024 8
3 août 2020 à 17:03
Comme je l'ai expliqué je ne peux pas ajouter les Dir
parce que parmi 4.837 utilisateurs le problème s'est posé 2 fois mi juin et aujourd’hui.
Les utilisateurs qui ont rencontré ce problème ne l'ont pas signalé, je le sais parce que le logiciel envoie un rapport d'erreur, je ne pense pas qu'ils feront attention au message.

Je ne vois pas non plus ce que ces Dir pourraient apporter
soit le répertoire existe alors pourquoi n'a-t-il pas été supprimé ?
soit le répertoire n'existe pas alors pourquoi n'a-t-il pas été créé ?

Je teste d'ailleurs ces 2 cas en FSO :
si le répertoire existe, je le supprime, donc il n'existe pas
je crée le répertoire donc il est vide
si le répertoire existe j'ajoute un sous répertoire => erreur 58 !
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
4 août 2020 à 08:10
Bonjour a tous,

Excusez l'incruste.

je le sais parce que le logiciel envoie un rapport d'erreur, je ne pense pas qu'ils feront attention au message.
Modifiez le rapport d'erreur en le complétant des infos sur le fichier en cause

parce que parmi 4.837 utilisateurs
Ben oui, mais soit vous résolvez l'erreur, soit vous la traitez.
yg_be et pijku vous ont donne des pistes

Les deux PC qui vous embêtent sont différents en quoi par rapport au autres?

Dans le code que vous montrez le programme s'arrête !
Le rapport d'erreur arrive par miracle?
0
Herve_be Messages postés 1015 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 10 mars 2024 8
Modifié le 4 août 2020 à 12:24
Bonjour,
Je n'ai aucune idée des PC utilisés.
En car d'erreur un
on error goto
appelle une Sub qui envoie un fichier sur le serveur.
Il est possible d'ajouter des infos dans ce fichier en créant une nouvelle version du logiciel.

J'ai essayé avec ma version de test alors que tous les répertoires sont bien créés

MsgBox Dir(App.Path & "\Templates\")
donne un message vide !
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
4 août 2020 à 13:29
Re,
Tout a fait Thierry, vous voulez lister des repertoires, pas des fichiers.
a voir:
http://boisgontierjacques.free.fr/fichiers/ArborescenceRepertoireSousRep.xls
0
yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 1 471
4 août 2020 à 13:47
comment détermines-tu à quelle instruction l'erreur s'est produite?
comment se termine le traitement de l'erreur?
pourquoi ne pas utiliser FolderExists() au lieu de dir()?
as-tu envisagé, en cas d'erreur, d'attendre et de réessayer?
0
Herve_be Messages postés 1015 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 10 mars 2024 8 > f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024
4 août 2020 à 14:02
Qui est Thierry ?
0
Herve_be Messages postés 1015 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 10 mars 2024 8 > yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024
4 août 2020 à 14:09
comment détermines-tu à quelle instruction l'erreur s'est produite?
Erl


comment se termine le traitement de l'erreur?
Msgbox + envoi d'un ficher sur le serveur puis
end


pourquoi ne pas utiliser FolderExists() au lieu de dir()?
Je n'utilise pas Dir, j'utilise .Folderexists, voir mon code ici https://forums.commentcamarche.net/forum/affich-36712177-vb6-fso-createfolder-erreur-58-already-exists-alors-qu-il-n-existe-pas?utm_source=ccm&utm_campaign=newAnswer&utm_medium=mail#8
J'ai essayé ce que Pijaku préconise ici https://forums.commentcamarche.net/forum/affich-36712177-vb6-fso-createfolder-erreur-58-already-exists-alors-qu-il-n-existe-pas?utm_source=ccm&utm_campaign=newAnswer&utm_medium=mail#6

as-tu envisagé, en cas d'erreur, d'attendre et de réessayer?
Pour attendre il faut qu'un évènement indique que l'attente est terminée sinon on boucle : attendre quoi ?
0
yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 1 471 > Herve_be Messages postés 1015 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 10 mars 2024
4 août 2020 à 14:56
attendre une demi seconde, et réessayer.
0