Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

Folder qui vient d'être créé n'existe pas !


Sujet :

VB 6 et antérieur

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    novembre 2008
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : novembre 2008
    Messages : 132
    Points : 47
    Points
    47
    Par défaut Folder qui vient d'être créé n'existe pas !
    Bonjour,
    J'ai une erreur 76 (Path not found) en essayant de créer un fichier dans un répertoire que je viens de créer, voici mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim fPath As New FileSystemObject
    TankFolder = App.Path & "\Log Book " & TankNr
    If Not fPath.FolderExists(TankFolder) Then fPath.CreateFolder (TankFolder)
    ParFileName = TankFolder & "\Data.par"
    Open ParFileName For Output As #1
    Je n'ai pas d'erreur sur .FolderExists ni sur .CreateFolder
    je suppose donc que soit le folder existait, soit il a été créé
    par contre j'ai une erreur 76 sur Open.

    Il est possible que je n'aie pas la permission d'accéder à ce folder
    mais alors pourquoi pas d'erreur sur .CreateFolder ?
    Je n'ai pas trouvé comment je peux vérifier si .CreateFolder a réellement fonctionné.
    Comment puis-je vérifier si j'ai accès avant d'essayer de créer le fichier ?

  2. #2
    Modérateur
    Avatar de l_autodidacte
    Homme Profil pro
    Retraité : Directeur de lycée/Professeur de sciences physiques
    Inscrit en
    juillet 2009
    Messages
    2 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Retraité : Directeur de lycée/Professeur de sciences physiques
    Secteur : Enseignement

    Informations forums :
    Inscription : juillet 2009
    Messages : 2 283
    Points : 5 399
    Points
    5 399
    Par défaut
    Si TankNr est une variable, il faut la renseigner sinon la mettre entre guillemets "TankNr"
    S'il s'agit d'un sous-dossier à créer et que "Log Book" n'existe pas, il faut d'abord le créer pour pouvoir créer le sous-dossier suivant.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        Dim fso As New FileSystemObject, TankFolder$, TankNr$, ParFileName$, FD As Object
         TankNr$ = "TestFolder" ' un exemple de dossier ou une partie du nom du dossier
        TankFolder = App.Path & "\Log Book " & TankNr
     
        If Not fso.FolderExists(TankFolder) Then
            Set FD = fso.CreateFolder(TankFolder)
            ' Vérification si le dossier n'a pas été créé  aupravant
            MsgBox FD.Path
        End If
        ParFileName = TankFolder & "\Data.par"
     
        Open ParFileName For Output As #1

    Ne pas oublier le tag si satisfait.
    Voter pour toute réponse satisfaisante avec pour encourager les intervenants.
    Balises CODE indispensables. Regardez ICI
    Toujours utiliser la clause Option Explicit(VBx, VBS ou VBA) et Ne jamais typer variables et/ou fonctions en VBS.
    Vous pouvez consulter mes contributions
    Ne pas oublier de consulter les différentes FAQs et les Cours/Tutoriels VB6/VBScript
    Ne pas oublier L'Aide VBScript et MSDN VB6 Fr

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    novembre 2008
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : novembre 2008
    Messages : 132
    Points : 47
    Points
    47
    Par défaut
    Merci pour ta réponse
    TankNr est une textbox, je devrais écrire TankNr.text
    Elle est Locked, on ne peut la modifier que par l'intermédiaire d'un VScrollBar, sa valeur est donc correcte, dans le cas en question "1".

    Je veux donc créer un sous-répertoire "Log Book 1" dans le répertoire de l'application.

    La différence avec mon code
    je fais If Not fPath.FolderExists(TankFolder) Then fPath.CreateFolder (TankFolder),
    tu fais If Not fPath.FolderExists(TankFolder) Then Set FD = fso.CreateFolder(TankFolder);

    au lieu d'afficher FD dans un MsgBox comment puis-je vérifier que le Folder a bien été créé ?
    comment puis-je savoir que la création d'un fichier dans ce folder ne provoquera pas d'erreur ?

  4. #4
    Modérateur
    Avatar de l_autodidacte
    Homme Profil pro
    Retraité : Directeur de lycée/Professeur de sciences physiques
    Inscrit en
    juillet 2009
    Messages
    2 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Retraité : Directeur de lycée/Professeur de sciences physiques
    Secteur : Enseignement

    Informations forums :
    Inscription : juillet 2009
    Messages : 2 283
    Points : 5 399
    Points
    5 399
    Par défaut
    FD.Path est un très bon moyen pour vérifier si le dossier existe ou non, s'il n'existe pas cela produit une erreur.

    Pour éviter le MsgBox, tu peux par exemple utiliser le TextBox TankNr pour modifier la couleur du texte qu'il y a.
    Pour cela remplace la ligne 8 par If fso.FolderExists(FD.Path) Then TankNr.ForeColor = vbGreen ,
    et cette couleur ne changera pas si le dossier existe déjà ( n'a pas été créé dans cette étape).

    Pour la dernière question, même si le fichier existe, il n'y aurait pas d'erreur sauf si le fichier existe déjà ET est utilisé ou ouvert par l'instruction Open.
    Ne pas oublier le tag si satisfait.
    Voter pour toute réponse satisfaisante avec pour encourager les intervenants.
    Balises CODE indispensables. Regardez ICI
    Toujours utiliser la clause Option Explicit(VBx, VBS ou VBA) et Ne jamais typer variables et/ou fonctions en VBS.
    Vous pouvez consulter mes contributions
    Ne pas oublier de consulter les différentes FAQs et les Cours/Tutoriels VB6/VBScript
    Ne pas oublier L'Aide VBScript et MSDN VB6 Fr

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    novembre 2008
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : novembre 2008
    Messages : 132
    Points : 47
    Points
    47
    Par défaut
    J'ai oublié de signaler que chez moi tout fonctionne très bien, c'est chez certains rares clients que ça coince.
    Une MsgBox ou un contrôle qui change de couleur ne va pas les aider (moi non plus) à savoir pourquoi chez eux ça ne fonctionne pas.

    Je suis persuadé qu'avec If Not fPath.FolderExists(TankFolder) Then fPath.CreateFolder (TankFolder)il ne va pas essayer de créer le Folder s'il existe déjà.
    Est-ce que fPath.CreateFolder (TankFolder) va générer une erreur s'il n'arrive pas à créer le Folder ?
    Puisque le programme continue je ne vois que 2 possibilités
    • soit le folder n'existe pas, il essaye de le créer, ça ne fonctionne pas mais il ne dit rien
    • soit le folder existe (et il ne le crée pas) ou pas (et il le crée bien)
    dans les 2 cas Open donne "Folder not found" donc il doit y avoir un problème avec ce folder.
    Est-ce que le parent pourrait être "protégé" par Windows qui empêche d'y créer un folder et/ou un fichier ?

    Edit : je viens d'essayer ceci : si je mets dans le programme dans C:\temp j'ai bien l'erreur; quand elle se produit j'ai ajouté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim fPath As New FileSystemObject
    Dim fd As Folder
    Set fd = fPath.GetFolder(FolderName)
    FolderInfos = fd.Attributes
    J'obtiens FolderInfos = 16 càd ... Directory, je m'attendais à hidden, read only ou quelque chose d'autre qui bloque

    Edit 2 : par contre il a bien créé le sous répertoire "Log Book 1" dans C:\Temp mais l'explorateur Windows me dit que ce répertoire est en lecture seule !
    Si c'est ça le problème, comment faire en sorte que fso.CreateFolder crée un répertoire qui n'est pas bloqué en écriture ?

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    novembre 2008
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : novembre 2008
    Messages : 132
    Points : 47
    Points
    47
    Par défaut
    Bonjour,
    J'ai intercepté l'erreur 76 pour émettre un message disant que le folder choisi ne convient pas.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/10/2008, 11h59
  2. Réponses: 10
    Dernier message: 30/06/2008, 22h04
  3. [MySQL] Récupérer l'ID d'une entrée qui vient d'être créée
    Par yongblood dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 23/06/2007, 07h14
  4. Réponses: 2
    Dernier message: 05/06/2006, 18h17
  5. Récupérer l'id d'un élément qui vient d'être inséré
    Par sg-40 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 18/06/2004, 11h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo