none
Fichiers et dossiers (création,existance, suppression) RRS feed

Réponses

  • Hello,

     

    Pour supprimer un répertoire, l'instruction VB : RmDir()

    Pour créer un répertoire, l'instruction VB : MKDir()

    Pour tester si un fichier existe, voir l'article 29 de la FAQ, déjà cité dans mon premier post :-( : http://faq.vb.free.fr/index.php?question=29

    Pour créer un fichier texte, il y a plusieurs façons en fonction des besoins et du fichier. Le tout est expliqué en long en large et en travers dans la FAQ : http://faq.vb.free.fr/index.php?question=206

    Pour supprimer un fichier, l'instruction VB Kill() est effectivement appropriée.

    Note: les articles de la FAQ comportent presque tous une section "Pour Aller Plus Loin" et "Voir Aussi" en fin d'article; ces 2 sections comportent en général des liens bien utiles à consulter.

    Note 2: La FAQ dont il est question ici est la FAQ de feu le newsgroup Usenet microsoft.public.fr.vb. Ce forum en est le successeur, et la FAQ reste ... la FAQ !

     

    Cordialement,

     

     


    Jean-marc
    • Marqué comme réponse Alex Petrescu mardi 20 juillet 2010 12:32
    samedi 17 juillet 2010 20:41

Toutes les réponses

  • réponse trouvée

     Dim fs As Scripting.FileSystemObject
     
      Set fs = New Scripting.FileSystemObject
     
      ' test si le repertoire existe
      If fs.FolderExists(chemin) Then
        msgbox "existe"
    else msgbox "n'existe pas"
      End If
     
      Set fs = Nothing
    
    il faut ajouter au projet la référence  "Ms Scripting runtime"

    vendredi 16 juillet 2010 12:23
  • Hello,

     

    il suffit d'utiliser GetAttr().

    Voici une fonction utilisant ce principe:

    Private Function DirExists(ByVal dirPath As String) As Boolean
    
    Dim attr    As Long
    
      On Error GoTo DirExists_Fail
      
      DirExists = False
      
      attr = GetAttr(dirPath)
      If (attr And vbDirectory) = vbDirectory Then
        DirExists = True
      End If
      
    DirExists_End:
      Exit Function
      
    DirExists_Fail:
      DirExists = False
      Resume DirExists_End
    End Function

    Tu peux aussi consulter l'article suivant de la FAQ, qui explique bien l'utilisation de GetAttr:

    http://faq.vb.free.fr/index.php?question=29

     

    Cordialement,

     


    Jean-marc
    vendredi 16 juillet 2010 12:28
  • Hello,

     

    L'utilisation de FileSystemObject (fso) pose beaucoup de problèmes.

    Voir à ce sujet l'article de la FAQ:

    http://faq.vb.free.fr/index.php?question=126

    La méthode utilisant GetAttr() (Cf. ma réponse) est sans doute préférable.

     

    Cordialement,

     


    Jean-marc
    vendredi 16 juillet 2010 15:27
  • Merci beaucoup de suivre ma question

     

    je suis convaincu des inconvénients des fso, mais je les utilisent aussi pour:

    * supprimer des reprtoires

    * créer des répertoires

    veuillez me rediriger vers le bon chemin.

    il en est de même pour les fichiers (text)

    * tester si un fichier existe (avec If Dir ("c:\del.txt", vbHidden) <> "" Then)

    * créer un fichier (avec newfich )

    * supprimer un fichier (avec KILL )

    si ces dernières présentent aussi des inconvénients, veuillez me diriger vers le bon choix. Je serais reconnaissant si vous pourriez me fournir des liens utiles pour ces tâches.

    vendredi 16 juillet 2010 15:50
  • Hello,

     

    Pour supprimer un répertoire, l'instruction VB : RmDir()

    Pour créer un répertoire, l'instruction VB : MKDir()

    Pour tester si un fichier existe, voir l'article 29 de la FAQ, déjà cité dans mon premier post :-( : http://faq.vb.free.fr/index.php?question=29

    Pour créer un fichier texte, il y a plusieurs façons en fonction des besoins et du fichier. Le tout est expliqué en long en large et en travers dans la FAQ : http://faq.vb.free.fr/index.php?question=206

    Pour supprimer un fichier, l'instruction VB Kill() est effectivement appropriée.

    Note: les articles de la FAQ comportent presque tous une section "Pour Aller Plus Loin" et "Voir Aussi" en fin d'article; ces 2 sections comportent en général des liens bien utiles à consulter.

    Note 2: La FAQ dont il est question ici est la FAQ de feu le newsgroup Usenet microsoft.public.fr.vb. Ce forum en est le successeur, et la FAQ reste ... la FAQ !

     

    Cordialement,

     

     


    Jean-marc
    • Marqué comme réponse Alex Petrescu mardi 20 juillet 2010 12:32
    samedi 17 juillet 2010 20:41
  • bonjour

    une dernière chose (peut être);

    comment savoir si un dossier est vide (puisque Rmdir exige qu'il le soit)

    Merci encore

    dimanche 18 juillet 2010 16:08
  • Bonjour,

    À mon avis, le plus simple est de créer une routine d'erreur initialisée avant le RmDir.


    Cordialement Aski MVP Desktop Experience http://dechily.org/Forum_Aski/
    dimanche 18 juillet 2010 16:36
  • Hello,

    Plein de méthodes possibles, en fonction de la "précision" requise. Il y a pas mal de pistes dans la question 169 de la FAQ:

    http://faq.vb.free.fr/index.php?question=169

    Ce que préconise Aski est aussi une Bonne (tm) solution. On peut par exemple faire ceci:

    Function SupprimeRepertoire(ByVal path As String) As Long
    
      On Error GoTo SupprimeRepertoire_ERR
      
      RmDir path
      
      SupprimeRepertoire = 0
      
    SupprimeRepertoire_END:
      Exit Function
      
    SupprimeRepertoire_ERR:
      SupprimeRepertoire = Err.Number
      Resume SupprimeRepertoire_END
    End Function

    et l'utiliser comme cela:

    Dim ret As Long
    
      ret = SupprimeRepertoire("c:\tempo789")
      
      If ret = 0 Then
        MsgBox "Répertoire supprimé"
      Else
        Select Case ret
          Case 75
            MsgBox "Répertoire non vide (path/file access error)"
          Case 76
            MsgBox "Répertoire non trouvé"
          ' Case ...
            ' ...
          Case Default
            MsgBox "Echec lors de la suppression. Error:" & ret
        End Select
      End If

    Cordialement,

     


    Jean-marc
    dimanche 18 juillet 2010 17:32
  • Merci beaucoup

    j'ai trouvé une autre méthode plus simple (on teste NbrDossier et NbrFichiers)

    Dim NbrDossier As Integer, NbrFichiers As Integer
     
    Form1.Controls.Add "vb.DirListBox", "MeDir"
    Form1.Controls("MeDir").Path = "C:\N1"
    NbrDossier = Form1.Controls("MeDir").ListCount
    Form1.Controls.Remove "MeDir"
     
    Form1.Controls.Add "vb.FileListBox", "MeFile"
    Form1.Controls("MeFile").Path = "C:\N1"
    NbrFichiers = Form1.Controls("MeFile").ListCount
    Form1.Controls.Remove "MeFile"
    

    dimanche 18 juillet 2010 18:35
  • Hello,

     

    A mon sens ce n'est pas "plus simple", mais "plus vilain"; ça viole surtout à peu près tous les principes connus de "bonne pratique": performances épouvantables, portabilité nulle, réutilisation = 0, modularité inexistante, etc.

    Bref, à déconseiller de la manière la plus ferme et absolue!

    Si tu souhaites compter le nombre de fichiers et de dossiers, il faut le faire en utilsant l'instruction Dir$(), comme expliqué ici:

    http://faq.vb.free.fr/index.php?question=169;

    On utilisera la fonction Dir$(), telle que décrite ici: http://msdn.microsoft.com/en-us/library/aa262726(VS.60).aspx

    A noter que compter le nombre de fichiers et de répertoires pour vérifier si tu peux appeler RmDir est aussi une (grave) faute de design : tu fais effectuer au programme un traitement coûteux, inutile en soi, hors de propos, alors qu'il existe une alternative naturelle à toute cette débauche de processing.

     

    Cordialement,

     


    Jean-marc
    • Proposé comme réponse EhJoe dimanche 29 août 2010 18:11
    dimanche 18 juillet 2010 19:08
  • bonjours, bon,  j'ai changé de méthode (sachant que le dossier ne contient que des fichiers)

    Dim mifil As String
    mifil = Dir(dosadr)
    If mifil = "" Then
    RmDir dosadr
    End If
    

    maintenant que l'application est terminée, j'ai une autre question

    Cette application permet, sous un dossier "C:\REP", de créer des sous-dossiers, des fichiers dans ces derniers, en supprime quelques uns ou tous, mais le dossier "C:\REP" existe toujours. ce que je savoir est comment verrouiller ce dossier de sorte qu'il soit accessible uniquement par le programme VB, l'utilisateur ne peut que faire une copie de ce dossier et de son contenu, il ne doit pas être permit, manuellement, ni de supprimer ou ajouter des fichiers ou des sous-dossiers, ni les renommer...

    Merci d'avance

    mardi 20 juillet 2010 11:29