Procédure pas à pas : manipulation de fichiers et de répertoires en Visual Basic
Mise à jour : novembre 2007
Cette procédure pas à pas présente les notions de base de l'E/S de fichier dans Microsoft Visual Basic 2005. Pour illustrer cette fonctionnalité, elle crée une petite application, FileExplorer, qui examine des fichiers texte dans un répertoire et fournit des informations telles que les attributs, la date et l'heure de dernier accès et les 80 premiers caractères du fichier. Elle comprend une option qui écrit des informations dans un fichier journal.
Remarque : |
---|
Les options disponibles dans les boîtes de dialogue, ainsi que les noms et emplacements des commandes de menu que vous voyez, peuvent différer de ce qui est décrit dans l'aide selon vos paramètres actifs ou votre édition. Cette page d'aide concerne les Paramètres de développement généraux. Pour modifier vos paramètres, choisissez Importation et exportation de paramètres dans le menu Outils. Pour plus d'informations, consultez Paramètres Visual Studio. |
Création de l'application
Pour débuter le projet, créez un formulaire à partir duquel les utilisateurs pourront sélectionner un répertoire, un fichier dans ce répertoire et les informations à récupérer sur ce fichier.
Pour créer le projet
Dans le menu Fichier, cliquez sur NouveauProjet.
La boîte de dialogue Nouveau projet s'affiche.
Dans le volet Types de projets, cliquez sur Projets Visual Basic, et dans le volet Modèles, cliquez sur Application Windows.
Dans la zone Nom, tapez FileExplorer pour définir le nom de projet.
Visual Studio ajoute le projet à l'Explorateur de solutions et le Concepteur Windows Forms s'ouvre.
Ajoutez au formulaire les contrôles répertoriés dans le tableau suivant et définissez les valeurs de propriété correspondantes.
Objet
Propriétés
Valeur
Nom
Texte
txtDirectory
Répertoire
Nom
Texte
btnSubmit
Submit
Nom
Texte
btnExamine
Examine
Nom
Texte
lstFilePick
Select A File
Nom
Texte
Activé
chkFileLength
File Length
True
Nom
Texte
Activé
chkLastAccess
Last Access Time
True
Nom
Texte
Activé
chkSave
Save Results
False
Affichage du répertoire actif
L'application FileExplorer a besoin d'un point de départ. Par conséquent, la TextBoxtxtDirectory utilise la fonction My.Computer.FileSystem.CurrentDirectory pour retourner et afficher une chaîne représentant le chemin d'accès en cours.
Pour renvoyer le répertoire actif
Créez un gestionnaire d'événements pour Form1_Load en double-cliquant sur le formulaire.
L'éditeur de code s'ouvre.
Ajoutez le code ci-après pour que la zone de texte TextBoxtxtDirectory affiche l'emplacement en cours.
txtDirectory.Text = My.Computer.FileSystem.CurrentDirectory
Exécutez le programme pour vérifier que le chemin d'accès correct est retourné.
La TextBoxtxtDirectory affiche le répertoire actif.
Changement de répertoire
Étant donné que l'utilisateur souhaitera peut-être sélectionner des fichiers dans un répertoire différent, l'application utilise la même propriété pour passer d'un répertoire à un autre. Pour changer de répertoire, l'utilisateur entre un nouveau chemin d'accès dans la TextBoxtxtDirectory.
Pour changer de répertoire
Créez un gestionnaire d'événements de type clic pour btnSubmit en double-cliquant sur le contrôle situé sur le formulaire.
L'éditeur de code s'ouvre.
Ajoutez le code ci-après au gestionnaire d'événements de type clic.
Dim NewPath As String ' NewPath holds the path the user has entered. NewPath = txtDirectory.Text ' Change the location to NewPath. My.Computer.FileSystem.CurrentDirectory = NewPath
Vérification de l'entrée d'un chemin d'accès valide
Utilisez une instruction Try...Catch pour intercepter les exceptions causées par la soumission d'un chemin d'accès vide ou incorrecte.
Pour garantir des chemins d'accès valides
Dans l'événement btnSubmit_Click, après la ligne de code Dim NewPath As String, ajoutez Dim ErrorMessage As String sur une nouvelle ligne.
Avant la ligne de code My.Computer.FileSystem.CurrentDirectory = NewPath, ajoutez une instruction Try sur une ligne distincte comme ci-après. Si vous appuyez sur Retour, l'éditeur de code insère automatiquement les instructions Catch ex As Exception et End Try. Retirez-les ; vous ajouterez vos propres instructions à l'étape suivante.
Try
Après la ligne de code My.Computer.FileSystem.CurrentDirectory = NewPath, ajoutez le code suivant.
' This checks to make sure the path is not blank. Catch ex As Exception When NewPath = "" ErrorMessage = "You must enter a path." ' This catches errors caused by a path that is not valid. Catch ErrorMessage = "You must enter a valid path. If trying " & _ "to access a different drive, remember to include the drive " & _ "letter." Finally ' Display the error message only if one exists. If ErrorMessage <> Nothing Then MsgBox(ErrorMessage) End If End Try
Affichage du contenu du répertoire dans une liste déroulante
Pour permettre à l'application d'afficher le contenu du répertoire actif, vous pouvez utiliser la méthode My.Computer.FileSystem.GetFiles qui retourne une collection de chaînes représentant les noms des fichiers du répertoire. Vous pouvez utiliser des caractères génériques à l'aide de GetFiles pour ne sélectionner que les fichiers d'un modèle particulier. Dans cet exemple, seuls les fichiers avec l'extension .txt sont retournés.
Pour afficher le contenu du répertoire
Au début de l'événement btnSubmit_Click, insérez le code suivant.
Dim fileList As System.Collections.ObjectModel.ReadOnlyCollection(Of String).
Après la ligne End Try, insérez le code suivant.
fileList = My.Computer.FileSystem.GetFiles( _ My.Computer.FileSystem.CurrentDirectory, _ FileIO.SearchOption.SearchTopLevelOnly, "*.txt") For Each foundFile As String In fileList lstFilePick.Items.Add(foundFile) Next
Les informations collectées s'affichent dans la ComboBoxlstFilePick, dans lequel vous pouvez prélever un fichier déterminé pour l'examiner.
Testez l'application en l'exécutant d'abord avec un répertoire qui ne contient pas de fichier .txt, puis avec un répertoire qui en contient plusieurs. Dans le premier cas, l'application affiche le message d'erreur approprié. Dans le second, l'application affiche la liste du ComboBox de tous les fichiers .txt du répertoire indiqué dans la TextBoxtxtDirectory.
Permettre à un utilisateur de sélectionner un fichier pour l'examiner
Bien que la ComboBoxlstFilePick affiche tous les fichiers d'un répertoire, un utilisateur souhaitera probablement sélectionner et examiner un fichier déterminé.
Pour permettre la sélection d'un fichier spécifique
Créez un gestionnaire d'événements de type clic pour btnExamine_Click et ajoutez le code ci-après pour confirmer la sélection d'un fichier.
Dim thisFile As System.IO.FileInfo thisFile = My.Computer.FileSystem.GetFileInfo(CStr(lstFilePick.SelectedItem))
Permettre à un utilisateur de déterminer les informations à collecter
Les fichiers s'affichent désormais dans la ComboBoxlstFilePick. Du code supplémentaire permet à l'utilisateur de préciser les informations à présenter. Par exemple, un utilisateur peut souhaiter connaître simplement la date du dernier accès au fichier. Un autre utilisateur peut également souhaiter connaître la taille de ce fichier. Un utilisateur sélectionne ou désactive des cases à cocher (chkLastAccess, chkFileLength) pour personnaliser les résultats.
Pour afficher des informations spécifiques
Déclarez les variables suivantes au début de l'événement btnExamine_Click, après (lstFilePick.SelectedItem).
Dim stringlength As String stringLength = "The file's length, in bytes, is: " Dim stringLastAccess As String stringLastAccess = "The file was last accessed on: " Dim LastAccess As Date Dim Length As Long Dim FirstLine As String = "" Dim FinalString As String = "" Dim NewName As String NewName = CType(lstFilePick.SelectedItem, String) If NewName = Nothing Then MsgBox("You must select a file to examine.") Exit Sub End If
La méthode My.Computer.FileSystem.GetFileInfo retourne un objet FileInfo qui peut être interrogé pour obtenir des informations sur un fichier.
Ajoutez le code suivant à la fin de l'événement btnExamine_Click:
' Check last access time. If chkLastAccess.Checked = True Then LastAccess = thisFile.LastAccessTime End If
La propriété LastAccessTime détermine la date et l'heure du dernier accès au fichier. La valeur Date renvoyée indique la date et l'heure de création ou de dernière modification du fichier.
Ajoutez le code suivant à la fin de l'événement btnExamine_Click:
' Check Length. If chkFileLength.Checked = True Then Length = thisFile.Length End If
La propriété Length, qui détermine la longueur du fichier, retourne une valeur Long indiquant la longueur du fichier en octets.
Affichage des résultats
Pour terminer la fonctionnalité de l'application, un message MsgBox présente les informations collectées.
Pour afficher les résultats
À la fin de l'instruction If qui détermine si la case chkLastAccessCheckBox a été cochée, ajoutez le code ci-dessous avant le dernier End If.
' Add to the messagebox. FinalString = FinalString & stringLastAccess & LastAccess & "." _ & vbCrLf
À la fin de l'instruction If qui détermine si la case chkFileLengthCheckBox a été cochée, ajoutez le code ci-dessous avant le dernier End If.
' Add to the messagebox. FinalString = FinalString & stringlength & CStr(Length) & "." _ & vbCrLf
À la fin de l'instruction If qui détermine si la case chkFirstLineCheckBox a été cochée, ajoutez le code ci-dessous avant le dernier End If.
' Add to the messagebox. FinalString &= FirstLine & vbCrLf
Enregistrement des résultats
Un utilisateur peut souhaiter enregistrer les résultats de l'examen d'un fichier. Par conséquent, ajoutez du code qui vérifie la présence d'un fichier journal, en crée un si nécessaire, puis écrit les résultats dans celui-ci.
Pour créer un fichier journal
Ajoutez le code ci-dessous à la fin de l'événement btnExamine_Click.
' Check to see if results should be saved. If chkSave.Checked = True And FinalString <> "" Then My.Computer.FileSystem.WriteAllText("log.txt", FinalString, True) End If
Pour tester votre application
Dans le répertoire de votre choix, créez un fichier texte nommé test.txt contenant la première ligne suivante :
« This is the first line of the first file. The FileExplorer application examines only text files. »
Dans le même répertoire, créez un deuxième fichier texte nommé test2.txt contenant la première ligne suivante :
« This is the first line of the second file. The FileExplorer application examines only text files. »
Démarrez l'application.
Tapez un chemin d'accès non valide et cliquez sur Submit.
Le message suivant s'affiche : « You must enter a valid path. If trying to access a different drive, remember to include the drive letter. »
Tapez le chemin du répertoire qui contient test.txt et cliquez sur Submit.
La ComboBoxlstFilePick affiche les fichiers texte.
Sélectionnez test.txt dans la ComboBoxlstFilePick. Assurez-vous que toutes les cases sont cochées et cliquez sur Examine.
Le formulaire de résultats inclut la date du dernier accès et la longueur.
Sélectionnez test2.txt dans la ComboBoxlstFilePick, désactivez toutes les cases à cocher, puis cliquez sur Examine.
Le message d'erreur suivant s'affiche : « No file attribute checkboxes selected. »
Sélectionnez Last Access et Save Results, puis cliquez sur Examine.
Le formulaire de résultats affiche uniquement l'heure du dernier accès.
Fermez FileExplorer.
Étant donné que vous avez vérifié l'option Save Results, FileExplorer génère un fichier journal nommé log.txt dans le même répertoire que les fichiers texte.
Pour vérifier le fichier journal
- Dans le répertoire actif, ouvrez log.txt et vérifiez que FileExplorer a consigné les informations appropriées.