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

Herve_be Messages postés 1182 Date d'inscription   Statut Membre Dernière intervention   -  
Herve_be Messages postés 1182 Date d'inscription   Statut Membre Dernière intervention   -
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 ?

8 réponses

  1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    bonjour, peut-être pourrais-tu vérifier si le dossier existe avant de le créer?
    0
  2. Herve_be Messages postés 1182 Date d'inscription   Statut Membre Dernière intervention   11
     
    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
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      CreateFolder donne une erreur. A ta place, je serais curieux de vérifier ce qu'en pense FolderExists.
      que vaut FName?
      0
  3. Herve_be Messages postés 1182 Date d'inscription   Statut Membre Dernière intervention   11
     
    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
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      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
    2. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      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
  4. Herve_be Messages postés 1182 Date d'inscription   Statut Membre Dernière intervention   11
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Herve_be Messages postés 1182 Date d'inscription   Statut Membre Dernière intervention   11
     
    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
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      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
  7. Herve_be Messages postés 1182 Date d'inscription   Statut Membre Dernière intervention   11
     
    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
  8. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    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
  9. Herve_be Messages postés 1182 Date d'inscription   Statut Membre Dernière intervention   11
     
    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
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      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
    2. Herve_be Messages postés 1182 Date d'inscription   Statut Membre Dernière intervention   11 > f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention  
       
      Qui est Thierry ?
      0
    3. Herve_be Messages postés 1182 Date d'inscription   Statut Membre Dernière intervention   11 > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
       
      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
    4. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > Herve_be Messages postés 1182 Date d'inscription   Statut Membre Dernière intervention  
       
      attendre une demi seconde, et réessayer.
      0