Site:  Cours VB.net  
4.7 Travailler sur les répertoires.

          

Comment créer, copier effacer des répertoires (ou dossiers)?

Avec les classes  DirectoryInfo et Directory.

Avec la classe Path.

Avec la classe Environment.

Avec My.Computer.FileSystem en VS 2005.

Avec les Classes de VisualBasic.

Comment créer une boite de dialogue 'choix de répertoire' en VB2005?

Classe  DirectoryInfo et la Classe Directory du Framework:

Pour travailler sur les dossiers (ou répertoires), il faut au préalable taper:

Imports System.IO

La classe Directory est utilisée pour travailler sur un ensemble de dossier, la Classe directoryInfo donne des renseignements sur un dossier particulier (Après instanciation ).

La Classe Directory possède les méthodes suivantes.

Exists                Teste si le dossier existe.

CreateDirectory       Crée le dossier

Delete                Efface le dossier

Move                  Déplacement de dossier

GetCurrentDirectory   Retourne le dossier de travail de l'application en cours

SetCurrentDirectory   Définit le dossier de travail de l'application.

GetDirectoryRoot      Retourne le dossier racine du chemin spécifié.

GetDirectories        Retourne le tableau des sous dossiers du dossier spécifié.

GetFiles              Retourne les fichiers du dossier spécifié.

GetFilesSystemEntries Retourne fichier et sous dossier avec possibilité d'un filtre.

GetLogicalDrives      Retourne les disques

GetParent             Retourne le dossier parent du dossier spécifié.

La Classe Directory est statique : on l'utilise directement.

Exemple:

Afficher dans une ListeBox  les sous dossiers  (répertoires) du répertoire de l'application:

Dim SousDos() As String= Directory.GetDirectories(Directory.GetCurrentDirectory)

Dim Dossier As String

For Each Dossier In SousDos

    List1.Items.Add(Dossier)

Next

 

 

Afficher dans une ListeBox  les sous dossiers et fichiers.

 

On utilise ici la récursivité. Pour chaque sous-répertoire, on appelle la routine elle même.

 

Imports System.IO

 

Sub  AfficheTree ( ByVal myDir As String, ByVal Optional Niveau As Integer =0)

 

'Affiche le répertoire myDir

List1.Items.Add(New String (" ", niveau *2) & myDir)

 

'Affiche les fichiers

For Each fichier As String  In Directory.GetFiles( myDir)

    List1.Items.Add(New String (" ", niveau *2+2) & fichier)

Next

 

'Parcourt les sous-répertoires

For each sousRepertoire As String In Directory.GetDirectories( myDir)

    'Appel de manière récursive 'AfficheTree pour afficher le contenu des sous répertoires.

    AfficheTree (sousRepertoire, niveau+1)

Next

 

End Sub

 

 

La variable niveau  permet de pratiquer une indentation :New String (" ", niveau*2) produit une chaîne d'espace de longueur niveau *2.

 

On appelle cette routine avec  AfficheTree (c:\myprogramme", 0) 'éviter "c:\" car c'est très très long!!! on le fait tous pour tester!!

 

Directory.GetFiles et Directory.GetDirectories acceptent un argument supplémentaire qui fait office de filtre.

 

Directory.GetFiles( myDir, "*.txt") 'pour ne voir que les fichiers .txt.

 

 

Afficher dans une ListeBox  les exécutables d'un répertoire et de ses sous-répertoires.

 

Ici on utilise un argument supplémentaire qui permet de rechercher dans les sous répertoires.

 

Imports System.IO

 

For Each file As String In Directory.GetFiles("c:\windows", "*.exe", System.IO.SearchOption.AllDirectories ))

    List1.Items.Add (file)

Next

 Génial , non?  quelle économie de code!!

 

 

Afficher dans une ListeBox  les disques.

Imports System.IO

 

For Each disque As String In Directory.GetLogicalDrives()

    List1.Items.Add (Disque)

Next 

 

 

Afficher dans une ListeBox  les fichiers .jpg d'un répertoire.

 

Dim dirInfo As New System.IO.DirectoryInfo ("C:\Nos Images\sicile")

Dim file As System.IO.FileInfo

Dim files() As System.IO.FileInfo = dirInfo.GetFiles("*.jpg")

If (files IsNot Nothing) Then

For Each file In files

    ListBox1.Items.Add(file.FullName) 

Next

End If

 

 

 

 

Changer de répertoire courant, effacer un sous-répertoire.

 

Directory.SetCurrentDirectry (c:\mydirectory")

 

Directory.Delete (c:\otherdirectory") 'efface ce répertoire s'il est vide

 

Directory.Delete (c:\otherdirectory", True) 'efface ce répertoire ses fichiers et sous-répertoires.

 Ah!! nostalgique du DEL *.*

 

 

 

La Classe DirectoryInfo possède les propriétés suivantes.

Name            Nom du dossier (sans extension)

Full Name       Chemin et nom du dossier

Exists

Parent         Dossier parent

Root            Racine du dossier

La Classe DirectoryInfo n'est pas statique : il faut instancier un dossier avant de l'utiliser.

Il y a aussi les méthodes suivantes:

Create, Delete, MoveTo

CreateSubdirectory

GetDirectories    Retourne les sous-dossiers

GetFiles          Retourne des fichiers

GetFileSystemInfos

Exemple:

Afficher le répertoire parent d'un dossier:

Dim D As DirectoryInfo

D= New DirectoryInfo( MonDossier)

MsgBox(D.Parent.ToString)

 

Créer un répertoire:

Dim D As DirectoryInfo

D= New DirectoryInfo( MonDossier)

D.CreateSubdirectory("monsousdossier")

 

Effacer un répertoire et ses sous-répertoires:

Dim D As DirectoryInfo

D= New DirectoryInfo( MonDossier)

D.Delete(True)

 

 

 

 

Classe  Path

La Classe statique Path a des méthodes simplifiant la manipulation des répertoires:

Exemple:

Si  C= "C:\Windows\MonFichier.txt"

Path.GetDirectoryName(C)  retourne "C:\Windows

Path.GetFileName(C) retourne "Monfichier.txt"

Path.GetExtension(C) retourne ".txt"

Path.GetFileNameWithoutExtension(C) retourne "MonFichier"

Path.PathRoot(C) retourne "c:\"

Il y a aussi les méthodes  GetFulPath ChangeExtension, Combine, HasExtension...

GetFulPath: Transforme un chemin relatif en chemin absolu à l'aide du répertoire courant.

Path.GetFullPath("monAppli.exe")) retourne "C:\MonRep\monAppli.exe" si le répertoire courant est "C:\MonRep"

Combine: combine bout à bout un chemin et un nom de fichier

Path.Combine("C:\MonRep", "monAppli.exe")) retourne "C:\MonRep\monAppli.exe"

 

Classe  DriveInfo

Nouveauté en VB 2005, la Classe DriveInfo :

Pour un disque particulier, il faut instancier un DriveInfo avec la lettre du drive, ensuite, on a accès à toutes les propriétés du lecteur.

Dim di As New DriveInfo ("c:")

di.Name retourne le nom  du lecteur ( "c:" ici)

VolumeLabel  Nom (label) du lecteur (en lecture écriture)

DriveType ( Fixed, Removal, CDRom, Ram, Networl, Unknown)

DriveFormat (NTFS, Fat32)

TotalSize, TotalFreeSpace, AvailableFreeSpace

 

DriveInfo.GetDrives retourne tous les disques installées

For Each di As DriveInfo in DriveInfo.GetDrives()

 If di.IsReady Then 'il parait qu'il faut bien tester s'il est ready!!

    MsgBox (di.VolumeLabel)

 End if

Next

 

Classe Environment

Donne des informations concernant l'environnement et la plate-forme en cours ainsi que des moyens pour les manipuler. Par exemple: les arguments de la ligne de commande, le code de sortie, les paramètres des variables d'environnement, le contenu de la pile des appels, le temps écoulé depuis le dernier démarrage du système ou le numéro de version du Common Language Runtime mais aussi certains  répertoires .

Environment.CurrentDirectory  'donne le répertoire courant : ou le processus en cours démarre.

Environment.MachineName       'Obtient le nom NetBIOS de l'ordinateur local.

Environment.OsVersion         'Obtient un objet contenant l'identificateur et le numéro de version de la plate-forme en cours.

Environment.SystemDirectory   'Obtient le chemin qualifié complet du répertoire du système

Environment.UserName          'Obtient le nom d'utilisateur de la personne qui a lancé le thread en cours.

La fonction GetFolderPath  avec un argument faisant partie de l'énumération SpecialFolder retourne le répertoire d'un tas de choses:

Exemple: Quel est le répertoire Système?

Environment.GetFolderPath(Environment.SpecialFolder.System)
 

Comment récupérer le nom des disques?

Dim drives As String() = Environment.GetLogicalDrives()
 

Comment récupérer la ligne de commande?

Dim arguments As String() = Environment.GetCommandLineArgs()


Classe My.Computer.FileSystem en VS 2005.

En VS 2005 la classe My.Computer.FileSystem simplifie énormément les choses:

les méthodes CopyDirectory, CreateDirectory, DeleteDirectory, DirectoryExits permettent de copier, créer, effacer un répertoire ou de voir s'il existe. Il existe aussi RenameDirectory et MoveDirectory.

Exemple :

Afficher dans une MsgBox True si le répertoire 'c:\MyApplication\' existe.

MsgBox(My.Computer.FileSystem.FileExists("c:\MyApllication\").ToString)

Copier un répertoire dans un autre:

My.Computer.FileSystem.CopyDirectory("c:\a\", "c:\b\")

Exemple :

Afficher la liste des répertoires qui sont sous c:\; ici on utilise GetDirectories qui retourne une collection des répertoires.(count contient le nombre des répertoires, item () les noms.

Dim i As Integer

For i = 0 To My.Computer.FileSystem.GetDirectories("c:\").Count - 1

ListBox1.Items.Add(My.Computer.FileSystem.GetDirectories("c:\").Item(i))

Next i

SpecialDirectories permet de connaître certains répertoires spéciaux comme Programs, My Documents, My Music..

Exemple:

MsgBox(My.Computer.FileSystem.SpecialDirectories.CurrentUserApplicationData)

 

My.Computer.FileSystem.Drives est une collection contenant les disques présents.

 

On peut rechercher les fichiers qui contiennent un certain texte et afficher leurs noms dans une listBox.

Grâce à My.Computer.FileSystem.FindInFiles (Répertoire, texteàchercher, respectdelacasse, tyderecherche)

Dim value As System.Collections.ObjectModel.ReadOnlyCollection(Of String) = My.Computer.FileSystem.FindInFiles("c:\", "Open", False, FileIO.SearchOption.SearchTopLevelOnly)

For Each name As String In value

ListBox1.Items.Add(name)

Next

 

On peut aussi utiliser les anciennes méthodes de l'espace Visual Basic:

CurDir() retourne le chemin d'accès en cours.

MyPath = CurDir()
MyPath = CurDir("C"c)

 

Dir()

Retourne une chaîne représentant le nom d'un fichier, d'un répertoire ou d'un dossier qui correspond à un modèle ou un attribut de fichier spécifié ou à l'étiquette de volume d'un lecteur.

'vérifier si un fichier existe:

' Retourne "WIN.INI" si il existe.
MyFile = Dir("C:\WINDOWS\WIN.INI")

' Retourne le fichier spécifié par l'extension .
MyFile = Dir("C:\WINDOWS\*.INI")

'Un nouveau Dir retourne le fichier suivant
MyFile = Dir()

' On peut surcharger avec un attribut qui sert de filtre .
MyFile = Dir("*.TXT", vbHidden) ' affiche les fichiers cachés

' Recherche les sous répertoires.
MyPath = "c:\" ' Set the path.
MyName = Dir(MyPath, vbDirectory)

 

ChDrive  change le lecteur actif. La fonction lève une exception si le lecteur n'existe pas.

ChDrive("D")   

MkDir  crée un répertoire ou un dossier. Si aucun lecteur n'est spécifié, le nouveau répertoire ou dossier est créé sur le lecteur actif.

MkDir("C:\MYDIR") 
RmDir  enlève un répertoire ou un dossier existant.
' Vérifier que le répertoire est vide sinon effacer les fichier avec Kill.
RmDir ("MYDIR") 
ChDir change le répertoire par défaut mais pas le lecteur par défaut. 
ChDir("D:\TMP")
L'exécution de changements relatifs de répertoire s'effectue à l'aide de "..", comme suit :
ChDir("..") ' Remonte au répertoire parent.

FileCopy
Copier un fichier. 
FileCopy(SourceFile, DestinationFile)
Rename
Renommer un fichier, un répertoire ou un dossier.
Rename (OldName, NewName)
FileLen donne la longueur du fichier, SetAttr et GetAttr modifie ou lit les attributs du fichier

Result = GetAttr(FName)

Result est une combinaison des attributs. Pour déterminer les attributs définis, utilisez l'opérateur And pour effectuer une comparaison d'opérations de bits entre la valeur retournée par la fonction GetAttr et la valeur de l'attribut. Si le résultat est différent de zéro, cet attribut est défini pour le fichier désigné. Par exemple, la valeur de retour de l'expression And suivante est zéro si l'attribut Archive n'est pas défini :
Result = GetAttr(FName) And vbArchive
 

Comment créer une boite de dialogue 'Choix de répertoire' en VB2005?

 

Il faut instancier un FolderBrowserDialog, indiquer le répertoire de départ (RootFolder), le texte de la barre (Description) et l'ouvrir avec ShowDialog.

Le répertoire sélectionné par l'utilisateur se trouve dans SelectedPath .

 

Dim fB As New FolderBrowserDialog

fB.RootFolder = Environment.SpecialFolder.Desktop

fB.Description = "Sélectionnez un répertoire"

fB.ShowDialog()

If fB.SelectedPath = String.Empty Then

  MsgBox("Pas de sélection")

Else

  MsgBox(fB.SelectedPath)

End If

fB.Dispose()