Gestion de fichiers, de dossiers, DOS
Leçons de programmation Visual Basic
Certaines commandes de Visual Basic ne sont pas souvent expliquées et ont pourtant le mérite d'exister. Ainsi, il existe de nombreuses commandes qui permettent de gérer les dossiers de Windows, les fichiers, et de faire appel à des programmes extérieurs de manière assez efficace. Nous allons voir les différentes fonctions et commandes qui permettent de réaliser pas mal d'opérations sur les fichiers.
I - La Gestion des Fichiers :
Il existe une commande majeure pour la gestion des fichiers : Kill. Elle est dangereuse à manipuler puisqu'elle sert à supprimer un fichier sans passer par la corbeille. De plus elle accepte les jokers (caractères de type * et ?) . Exemple d'utilisation :
' Suppose que le fichier Testkill contient des données.
Kill "C:\Testkill"' Supprime tous les fichiers *.txt du dossier courant.
Kill "C:\*.txt"Le second exemple introduit une nouvelle notion : celle de dossier courant. En effet, il faut savoir qu'une application VB a un dossier courant qui est défini lors de son exécution. Nous allons voir comment y accéder dans le deuxième paragraphe.
Gestion des attribts de fichiers : les commandes GetAttr et SetAttr permettent d'accéder en lecture et en écriture aux attributs de fichiers. Voici des exemples d'utilisation :
' Suppose que le fichier Testattr existe
GetAttr "C:\Testattr"
'Suppose que le fichier Testattr existe
'rend ce fichier : archive et en lecture seule
SetAttr "C:\Testattr", vbArchive+vbReadOnly
'rend ce fichier : caché
SetAttr "C:\Testattr", vbHidden
'exemple pour "décacher" les mp3
SetAttr "C:\Mudique\*.mp3", vbNormalCes commandes sont très utiles par exemple pour remédier à l'action néfaste d'un virus (Elkern) qui à le mauvais goût de cacher tous les fichiers mp3 de votre système en grisant la case "Fichier caché".
II - La Gestion des Dossiers :
L'application VB assigne à un répertoire courant pour chaque lecteur présent sur le pc sur lequel l'application tourne.
La commande CurDir renvoie le répertoire courant dans une chaîne (string) :
Path$ = CurDir 'stocke dans Path$ le répertoire courant
La commande CurDir peut recevoir en argument (facultatif) le lecteur désiré pour avoir le répertoire en cours. Ainsi si on fait les deux commandes suivantes :
Path$ = CurDir("C")
Path$ = CurDir("E")Path$ ne contiendra pas le même chemin. Notez par ailleurs que si C: est le lecteur courant, les commandes CurDir et CurDir("C") sont équivalentes.
Les procédures qui permettent de changer de répertoire courant :
ChDrive permet de changer de lecteur courant de la façon suivante : ChDrive "D"
ChDir permet de changer de répertoire courant du lecteur spécifié : ChDir "C:\Excel" changera le répertoire courant du lecteur C. Cependant, si on a avant tapé ChDrive "D", D restera le répertoire courant. Notez enfin que si vous ne précisez pas le lecteur dans le chemin, alors, ChDir changera le répertoire courant du lecteur en cours.
Mais à quoi ça sert tout ça ??? C'est ce qu'on peut se demander en effet. Voici une situation pour laquelle ces commandes sont indispensables : Vous voulez appeler un programme DOS avec la commande Shell. Le problème est que vous voulez passer en argument un nom de fichier qui ne se trouve pas dans le même répertoire que le-dit programme.
> Si vous faites : Shell "C:\stdos.exe bob.txt" et que bob.txt se trouve dans "C:\Mes Documents", le programme renverra une erreur (ne trouvant pas le fichier) à moins que "C:\Mes Documents" soit le répertoire en cours de l'application VB.
> On fera donc dans ce cas :
ChDir "C:\Mes Documents"
Shell "C:\stdos.exe bob.txt"En effet si vous tentez de faire :Shell "C:\stdos.exe C:\Mes Documents\bob.txt", vous pouvez être sur que cela ne fonctionnera pas car il faudrait avoir le chemin DOS et non windows (i.e. sans espaces et avec des ~).
Exercice : Niveau 1 Indices Programmez une petite procédure qui se charge d'appeler un programme DOS en lui passant en argument un fichier qui aura été sélectionné dans une CommonDialog.
Conventions :
Nom du contrôle CommonDialog : cd
Application Dos : "C:\stdos.exe"1 Vous aurez besoin du répertoire du fichier à passer en argument au programme DOS.
2 Pensez à FileName et FileTitle (propriétés de la CommonDialog différentes).
3 Utilisez Left$ et Len
Solution
cd.ShowOpen
ChDir Left$(cd.filename, Len(cd.filename) - Len(cd.filetitle))
Shell "C:\stdos.exe "& cd.filetitle
Création et suppression de répertoires :
Les Commandes MkDir et RmDir permettent respectivement de créer et de supprimer un répertoire. Exemple :
MkDir "C:\Mes Documents\NewFolder"
RmDir "C:\Mes Documents\NewFolder"Si le lecteur en cours est "C:" alors on peut faire :
MkDir "Mes Documents\NewFolder"
RmDir "Mes Documents\NewFolder"Attention : RmDir ne supprime que des répertoires vides. Vous devez utiliser l'instruction Kill avant de supprimer un répertoire afin d'effacer tous les fichiers qu'il contient. Sinon, la commande RmDir renverra une erreur.
III - La Fonction Dir :
Elle permet de vérifier l'existence de fichiers ou dossiers avec certains attributs.
Exemples :
' Renvoie "WIN.INI" si ce fichier existe.
MyFile = Dir("C:\WINDOWS\WIN.INI")
' Renvoie le nom de fichier avec l'extension indiquée. Si plusieurs
' fichiers *.ini existent, le premier fichier trouvé est renvoyé.
MyFile = Dir("C:\WINDOWS\*.INI")' Appelle de nouveau Dir sans argument pour renvoyer le
' fichier *.INI suivant dans le même dossier.
MyFile = Dir' Renvoie le premier fichier *.TXT avec l'attribut fichier caché.
MyFile = Dir("*.TXT", vbHidden)Ce second exemple permet de facilement mettre en oeuvre des explorateurs en combinant de code à un TreeView et un ListView. Je vous laisse regarder et comprendre avec les commentaires.
' Affiche les noms dans C:\ représentant des dossiers.
MyPath = "c:\" ' Définit le chemin d'accès.
MyName = Dir(MyPath, vbDirectory) ' Extrait la première entrée.
Do While MyName <> "" ' Commence la boucle.
' Ignore le dossier courant et le dossier
' contenant le dossier courant.
If MyName <> "." And MyName <> ".." Then
' Utilise une comparaison au niveau du bit pour
' vérifier que MyName est un dossier.
If (GetAttr(MyPath & MyName) And vbDirectory) = vbDirectory Then
Debug.Print MyName ' Affiche l'entrée uniquement si elle
End If ' représente un dossier.
End If
MyName = Dir ' Extrait l'entrée suivante.
Loop