Delen via


Overzicht: Bestanden en mappen bewerken in Visual Basic

Deze procedure biedt een inleiding tot de basisprincipes van bestands-I/O in Visual Basic. Hierin wordt beschreven hoe u een kleine toepassing maakt waarin tekstbestanden in een map worden vermeld en onderzocht. Voor elk geselecteerd tekstbestand biedt de toepassing bestandskenmerken en de eerste regel inhoud. Er is een optie om informatie naar een logboekbestand te schrijven.

In dit scenario worden leden van de My.Computer.FileSystem Object, die beschikbaar zijn in Visual Basic, gebruikt. Zie FileSystem voor meer informatie. Aan het einde van het scenario wordt een gelijkwaardig voorbeeld gegeven waarin klassen uit de System.IO naamruimte worden gebruikt.

Notitie

Mogelijk worden op uw computer verschillende namen of locaties weergegeven voor sommige elementen van de Visual Studio-gebruikersinterface in de volgende instructies. De Visual Studio-editie die u hebt en de instellingen die u gebruikt, bepalen deze elementen. Zie Personalizing the IDE (Personalizing the IDE) voor meer informatie.

Het project maken

  1. Klik in het menu Bestand op Nieuw project.

    Het dialoogvenster Nieuw project wordt weergegeven.

  2. Vouw Visual Basic uit in het deelvenster Geïnstalleerde sjablonen en klik vervolgens op Windows. Klik in het deelvenster Sjablonen in het midden op Windows Forms-toepassing.

  3. Typ in het vak Naam om de projectnaam in te stellen en klik op OK.FileExplorer

    Visual Studio voegt het project toe aan Solution Explorer en de Windows Forms Designer wordt geopend.

  4. Voeg de besturingselementen in de volgende tabel toe aan het formulier en stel de bijbehorende waarden voor hun eigenschappen in.

    Besturingselement Eigenschappen Weergegeven als
    Listbox Naam filesListBox
    Knop Naam

    Text
    browseButton

    Bladeren
    Knop Naam

    Text
    examineButton

    Onderzoeken
    Selectievakje Naam

    Text
    saveCheckBox

    Resultaten opslaan
    FolderBrowserDialog Naam FolderBrowserDialog1

Een map selecteren en bestanden in een map weergeven

  1. Maak een Click gebeurtenis-handler voor browseButton door te dubbelklikken op het besturingselement in het formulier. De Code-editor wordt geopend.

  2. Voeg de volgende code toe aan de Click gebeurtenis-handler.

    If FolderBrowserDialog1.ShowDialog() = DialogResult.OK Then
        ' List files in the folder.
        ListFiles(FolderBrowserDialog1.SelectedPath)
    End If
    

    Het FolderBrowserDialog1.ShowDialog dialoogvenster Zoeken naar map wordt geopend. Nadat de gebruiker op OK heeft geklikt, wordt de SelectedPath eigenschap verzonden als een argument naar de ListFiles methode, die in de volgende stap wordt toegevoegd.

  3. Voeg de volgende ListFiles methode toe.

    Private Sub ListFiles(ByVal folderPath As String)
        filesListBox.Items.Clear()
    
        Dim fileNames = My.Computer.FileSystem.GetFiles(
            folderPath, FileIO.SearchOption.SearchTopLevelOnly, "*.txt")
    
        For Each fileName As String In fileNames
            filesListBox.Items.Add(fileName)
        Next
    End Sub
    

    Met deze code wordt eerst de keuzelijst gewist.

    De GetFiles methode haalt vervolgens een verzameling tekenreeksen op, één voor elk bestand in de map. De GetFiles methode accepteert een zoekpatroonargument om bestanden op te halen die overeenkomen met een bepaald patroon. In dit voorbeeld worden alleen bestanden met de extensie .txt geretourneerd.

    De tekenreeksen die door de GetFiles methode worden geretourneerd, worden vervolgens toegevoegd aan de keuzelijst.

  4. Voer de toepassing uit. Klik op de knop Bladeren . Blader in het dialoogvenster Map zoeken naar een map met .txt bestanden en selecteer de map en klik op OK.

    De ListBox lijst bevat een lijst met .txt bestanden in de geselecteerde map.

  5. Stop met het uitvoeren van de toepassing.

Kenmerken van een bestand en inhoud ophalen uit een tekstbestand

  1. Maak een Click gebeurtenis-handler voor examineButton door te dubbelklikken op het besturingselement in het formulier.

  2. Voeg de volgende code toe aan de Click gebeurtenis-handler.

    If filesListBox.SelectedItem Is Nothing Then
        MessageBox.Show("Please select a file.")
        Exit Sub
    End If
    
    ' Obtain the file path from the list box selection.
    Dim filePath = filesListBox.SelectedItem.ToString
    
    ' Verify that the file was not removed since the
    ' Browse button was clicked.
    If My.Computer.FileSystem.FileExists(filePath) = False Then
        MessageBox.Show("File Not Found: " & filePath)
        Exit Sub
    End If
    
    ' Obtain file information in a string.
    Dim fileInfoText As String = GetTextForOutput(filePath)
    
    ' Show the file information.
    MessageBox.Show(fileInfoText)
    

    De code controleert of een item is geselecteerd in de ListBox. Vervolgens wordt de vermelding van het bestandspad opgehaald uit de ListBox. De FileExists methode wordt gebruikt om te controleren of het bestand nog bestaat.

    Het bestandspad wordt als argument verzonden naar de GetTextForOutput methode, die in de volgende stap wordt toegevoegd. Deze methode retourneert een tekenreeks die bestandsgegevens bevat. De bestandsgegevens worden weergegeven in een Berichtenvak.

  3. Voeg de volgende GetTextForOutput methode toe.

    Private Function GetTextForOutput(ByVal filePath As String) As String
        ' Verify that the file exists.
        If My.Computer.FileSystem.FileExists(filePath) = False Then
            Throw New Exception("File Not Found: " & filePath)
        End If
    
        ' Create a new StringBuilder, which is used
        ' to efficiently build strings.
        Dim sb As New System.Text.StringBuilder()
    
        ' Obtain file information.
        Dim thisFile As System.IO.FileInfo = My.Computer.FileSystem.GetFileInfo(filePath)
    
        ' Add file attributes.
        sb.Append("File: " & thisFile.FullName)
        sb.Append(vbCrLf)
        sb.Append("Modified: " & thisFile.LastWriteTime.ToString)
        sb.Append(vbCrLf)
        sb.Append("Size: " & thisFile.Length.ToString & " bytes")
        sb.Append(vbCrLf)
    
        ' Open the text file.
        Dim sr As System.IO.StreamReader =
            My.Computer.FileSystem.OpenTextFileReader(filePath)
    
        ' Add the first line from the file.
        If sr.Peek() >= 0 Then
            sb.Append("First Line: " & sr.ReadLine())
        End If
        sr.Close()
    
        Return sb.ToString
    End Function
    

    De code gebruikt de GetFileInfo methode om bestandsparameters te verkrijgen. De bestandsparameters worden toegevoegd aan een StringBuilder.

    De OpenTextFileReader methode leest de bestandsinhoud in een StreamReader. De eerste regel van de inhoud wordt verkregen van de StreamReader en wordt toegevoegd aan de StringBuilder.

  4. Voer de toepassing uit. Klik op Bladeren en blader naar een map met .txt bestanden. Klik op OK.

    Selecteer een bestand in de ListBoxmap en klik vervolgens op Onderzoeken. A MessageBox geeft de bestandsgegevens weer.

  5. Stop met het uitvoeren van de toepassing.

Een logboekvermelding toevoegen

  1. Voeg de volgende code toe aan het einde van de examineButton_Click gebeurtenis-handler.

    If saveCheckBox.Checked = True Then
        ' Place the log file in the same folder as the examined file.
        Dim logFolder As String = My.Computer.FileSystem.GetFileInfo(filePath).DirectoryName
        Dim logFilePath = My.Computer.FileSystem.CombinePath(logFolder, "log.txt")
    
        Dim logText As String = "Logged: " & Date.Now.ToString &
            vbCrLf & fileInfoText & vbCrLf & vbCrLf
    
        ' Append text to the log file.
        My.Computer.FileSystem.WriteAllText(logFilePath, logText, append:=True)
    End If
    

    Met de code wordt het pad naar het logboekbestand ingesteld om het logboekbestand in dezelfde map te plaatsen als het geselecteerde bestand. De tekst van de logboekvermelding is ingesteld op de huidige datum en tijd, gevolgd door de bestandsgegevens.

    De WriteAllText methode, waarbij het append argument is ingesteld op True, wordt gebruikt om de logboekvermelding te maken.

  2. Voer de toepassing uit. Blader naar een tekstbestand, selecteer het in de ListBox, schakel het selectievakje Resultaten opslaan in en klik op Onderzoeken. Controleer of de logboekvermelding naar het log.txt bestand is geschreven.

  3. Stop met het uitvoeren van de toepassing.

De huidige map gebruiken

  1. Maak een gebeurtenis-handler voor Form1_Load door te dubbelklikken op het formulier.

  2. Voeg de volgende code toe aan de gebeurtenis-handler.

    ' Set the default directory of the folder browser to the current directory.
    FolderBrowserDialog1.SelectedPath = My.Computer.FileSystem.CurrentDirectory
    

    Met deze code wordt de standaardmap van de mapbrowser ingesteld op de huidige map.

  3. Voer de toepassing uit. Wanneer u de eerste keer op Bladeren klikt, wordt het dialoogvenster Bladeren naar map geopend in de huidige map.

  4. Stop met het uitvoeren van de toepassing.

Besturingselementen selectief inschakelen

  1. Voeg de volgende SetEnabled methode toe.

    Private Sub SetEnabled()
        Dim anySelected As Boolean =
            (filesListBox.SelectedItem IsNot Nothing)
    
        examineButton.Enabled = anySelected
        saveCheckBox.Enabled = anySelected
    End Sub
    

    Met de SetEnabled methode worden besturingselementen ingeschakeld of uitgeschakeld, afhankelijk van of een item is geselecteerd in de ListBox.

  2. Maak een SelectedIndexChanged gebeurtenis-handler voor filesListBox door te dubbelklikken op het ListBox besturingselement in het formulier.

  3. Voeg een aanroep toe aan SetEnabled de nieuwe filesListBox_SelectedIndexChanged gebeurtenis-handler.

  4. Voeg een aanroep toe aan SetEnabled het einde van de browseButton_Click gebeurtenis-handler.

  5. Voeg een aanroep toe aan SetEnabled het einde van de Form1_Load gebeurtenis-handler.

  6. Voer de toepassing uit. Het selectievakje Resultaten opslaan en de knop Onderzoeken zijn uitgeschakeld als een item niet is geselecteerd in het ListBoxitem.

Volledig voorbeeld met My.Computer.FileSystem

Hieronder volgt het volledige voorbeeld.


' This example uses members of the My.Computer.FileSystem
' object, which are available in Visual Basic.

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    ' Set the default directory of the folder browser to the current directory.
    FolderBrowserDialog1.SelectedPath = My.Computer.FileSystem.CurrentDirectory

    SetEnabled()
End Sub

Private Sub browseButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles browseButton.Click
    If FolderBrowserDialog1.ShowDialog() = DialogResult.OK Then
        ' List files in the folder.
        ListFiles(FolderBrowserDialog1.SelectedPath)
    End If
    SetEnabled()
End Sub

Private Sub ListFiles(ByVal folderPath As String)
    filesListBox.Items.Clear()

    Dim fileNames = My.Computer.FileSystem.GetFiles(
        folderPath, FileIO.SearchOption.SearchTopLevelOnly, "*.txt")

    For Each fileName As String In fileNames
        filesListBox.Items.Add(fileName)
    Next
End Sub

Private Sub examineButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles examineButton.Click
    If filesListBox.SelectedItem Is Nothing Then
        MessageBox.Show("Please select a file.")
        Exit Sub
    End If

    ' Obtain the file path from the list box selection.
    Dim filePath = filesListBox.SelectedItem.ToString

    ' Verify that the file was not removed since the
    ' Browse button was clicked.
    If My.Computer.FileSystem.FileExists(filePath) = False Then
        MessageBox.Show("File Not Found: " & filePath)
        Exit Sub
    End If

    ' Obtain file information in a string.
    Dim fileInfoText As String = GetTextForOutput(filePath)

    ' Show the file information.
    MessageBox.Show(fileInfoText)

    If saveCheckBox.Checked = True Then
        ' Place the log file in the same folder as the examined file.
        Dim logFolder As String = My.Computer.FileSystem.GetFileInfo(filePath).DirectoryName
        Dim logFilePath = My.Computer.FileSystem.CombinePath(logFolder, "log.txt")

        Dim logText As String = "Logged: " & Date.Now.ToString &
            vbCrLf & fileInfoText & vbCrLf & vbCrLf

        ' Append text to the log file.
        My.Computer.FileSystem.WriteAllText(logFilePath, logText, append:=True)
    End If
End Sub

Private Function GetTextForOutput(ByVal filePath As String) As String
    ' Verify that the file exists.
    If My.Computer.FileSystem.FileExists(filePath) = False Then
        Throw New Exception("File Not Found: " & filePath)
    End If

    ' Create a new StringBuilder, which is used
    ' to efficiently build strings.
    Dim sb As New System.Text.StringBuilder()

    ' Obtain file information.
    Dim thisFile As System.IO.FileInfo = My.Computer.FileSystem.GetFileInfo(filePath)

    ' Add file attributes.
    sb.Append("File: " & thisFile.FullName)
    sb.Append(vbCrLf)
    sb.Append("Modified: " & thisFile.LastWriteTime.ToString)
    sb.Append(vbCrLf)
    sb.Append("Size: " & thisFile.Length.ToString & " bytes")
    sb.Append(vbCrLf)

    ' Open the text file.
    Dim sr As System.IO.StreamReader =
        My.Computer.FileSystem.OpenTextFileReader(filePath)

    ' Add the first line from the file.
    If sr.Peek() >= 0 Then
        sb.Append("First Line: " & sr.ReadLine())
    End If
    sr.Close()

    Return sb.ToString
End Function

Private Sub filesListBox_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles filesListBox.SelectedIndexChanged
    SetEnabled()
End Sub

Private Sub SetEnabled()
    Dim anySelected As Boolean =
        (filesListBox.SelectedItem IsNot Nothing)

    examineButton.Enabled = anySelected
    saveCheckBox.Enabled = anySelected
End Sub

Volledig voorbeeld met behulp van System.IO

In het volgende equivalente voorbeeld worden klassen uit de System.IO naamruimte gebruikt in plaats van objecten te gebruiken My.Computer.FileSystem .


' This example uses classes from the System.IO namespace.

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    ' Set the default directory of the folder browser to the current directory.
    FolderBrowserDialog1.SelectedPath =
        System.IO.Directory.GetCurrentDirectory()

    SetEnabled()
End Sub

Private Sub browseButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles browseButton.Click
    If FolderBrowserDialog1.ShowDialog() = DialogResult.OK Then
        ' List files in the folder.
        ListFiles(FolderBrowserDialog1.SelectedPath)
        SetEnabled()
    End If
End Sub

Private Sub ListFiles(ByVal folderPath As String)
    filesListBox.Items.Clear()

    Dim fileNames As String() =
        System.IO.Directory.GetFiles(folderPath,
            "*.txt", System.IO.SearchOption.TopDirectoryOnly)

    For Each fileName As String In fileNames
        filesListBox.Items.Add(fileName)
    Next
End Sub

Private Sub examineButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles examineButton.Click
    If filesListBox.SelectedItem Is Nothing Then
        MessageBox.Show("Please select a file.")
        Exit Sub
    End If

    ' Obtain the file path from the list box selection.
    Dim filePath = filesListBox.SelectedItem.ToString

    ' Verify that the file was not removed since the
    ' Browse button was clicked.
    If System.IO.File.Exists(filePath) = False Then
        MessageBox.Show("File Not Found: " & filePath)
        Exit Sub
    End If

    ' Obtain file information in a string.
    Dim fileInfoText As String = GetTextForOutput(filePath)

    ' Show the file information.
    MessageBox.Show(fileInfoText)

    If saveCheckBox.Checked = True Then
        ' Place the log file in the same folder as the examined file.
        Dim logFolder As String =
            System.IO.Path.GetDirectoryName(filePath)
        Dim logFilePath = System.IO.Path.Combine(logFolder, "log.txt")

        ' Append text to the log file.
        Dim logText As String = "Logged: " & Date.Now.ToString &
            vbCrLf & fileInfoText & vbCrLf & vbCrLf

        System.IO.File.AppendAllText(logFilePath, logText)
    End If
End Sub

Private Function GetTextForOutput(ByVal filePath As String) As String
    ' Verify that the file exists.
    If System.IO.File.Exists(filePath) = False Then
        Throw New Exception("File Not Found: " & filePath)
    End If

    ' Create a new StringBuilder, which is used
    ' to efficiently build strings.
    Dim sb As New System.Text.StringBuilder()

    ' Obtain file information.
    Dim thisFile As New System.IO.FileInfo(filePath)

    ' Add file attributes.
    sb.Append("File: " & thisFile.FullName)
    sb.Append(vbCrLf)
    sb.Append("Modified: " & thisFile.LastWriteTime.ToString)
    sb.Append(vbCrLf)
    sb.Append("Size: " & thisFile.Length.ToString & " bytes")
    sb.Append(vbCrLf)

    ' Open the text file.
    Dim sr As System.IO.StreamReader =
        System.IO.File.OpenText(filePath)

    ' Add the first line from the file.
    If sr.Peek() >= 0 Then
        sb.Append("First Line: " & sr.ReadLine())
    End If
    sr.Close()

    Return sb.ToString
End Function

Private Sub filesListBox_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles filesListBox.SelectedIndexChanged
    SetEnabled()
End Sub

Private Sub SetEnabled()
    Dim anySelected As Boolean =
        (filesListBox.SelectedItem IsNot Nothing)

    examineButton.Enabled = anySelected
    saveCheckBox.Enabled = anySelected
End Sub

Zie ook