Partager via


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

  1. Dans le menu Fichier, cliquez sur NouveauProjet.

    La boîte de dialogue Nouveau projet s'affiche.

  2. Dans le volet Types de projets, cliquez sur Projets Visual Basic, et dans le volet Modèles, cliquez sur Application Windows.

  3. 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.

  4. 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

    TextBox

    Nom

    Texte

    txtDirectory

    Répertoire

    Button

    Nom

    Texte

    btnSubmit

    Submit

    Button

    Nom

    Texte

    btnExamine

    Examine

    ComboBox

    Nom

    Texte

    lstFilePick

    Select A File

    CheckBox

    Nom

    Texte

    Activé

    chkFileLength

    File Length

    True

    CheckBox

    Nom

    Texte

    Activé

    chkLastAccess

    Last Access Time

    True

    CheckBox

    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

  1. Créez un gestionnaire d'événements pour Form1_Load en double-cliquant sur le formulaire.

    L'éditeur de code s'ouvre.

  2. Ajoutez le code ci-après pour que la zone de texte TextBoxtxtDirectory affiche l'emplacement en cours.

    txtDirectory.Text = My.Computer.FileSystem.CurrentDirectory
    
  3. 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

  1. 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.

  2. 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

  1. 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.

  2. 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
    
  3. 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

  1. Au début de l'événement btnSubmit_Click, insérez le code suivant.

    Dim fileList As System.Collections.ObjectModel.ReadOnlyCollection(Of String).

  2. 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

  1. 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.

  2. 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.

  1. 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

  1. À 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
    
  2. À 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
    
  3. À 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

  1. 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. »

  2. 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. »

  3. Démarrez l'application.

  4. 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. »

  5. Tapez le chemin du répertoire qui contient test.txt et cliquez sur Submit.

    La ComboBoxlstFilePick affiche les fichiers texte.

  6. 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.

  7. 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. »

  8. Sélectionnez Last Access et Save Results, puis cliquez sur Examine.

    Le formulaire de résultats affiche uniquement l'heure du dernier accès.

  9. 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.

Voir aussi

Référence

My.Computer.FileSystem.CurrentDirectory, propriété

My.Computer.FileSystem.GetFileInfo, méthode