|
Site |
Cours VB.net |
|
|
|
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.IOLa 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)
NextEnd 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 - 1ListBox1.Items.Add(
My.Computer.FileSystem.GetDirectories("c:\").Item(i)) Next iSpecialDirectories 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 ThenMsgBox("Pas de sélection"
) ElseMsgBox(fB.SelectedPath)
End IffB.Dispose()
|
|
|
|
|