Freigeben über


Exemplarische Vorgehensweise: Bearbeiten von Dateien und Verzeichnissen in Visual Basic

Diese Anleitung bietet eine Einführung in die Grundlagen der Datei-Ein-/Ausgabe in Visual Basic. Es beschreibt, wie Sie eine kleine Anwendung erstellen, die Textdateien in einem Verzeichnis auflistet und untersucht. Für jede ausgewählte Textdatei stellt die Anwendung Dateiattribute und die erste Inhaltszeile bereit. Es gibt eine Option zum Schreiben von Informationen in eine Protokolldatei.

In dieser exemplarischen Vorgehensweise werden Member von My.Computer.FileSystem Object verwendet, die in Visual Basic verfügbar sind. Weitere Informationen finden Sie unter FileSystem. Am Ende der exemplarischen Vorgehensweise wird ein entsprechendes Beispiel bereitgestellt, das Klassen aus dem System.IO Namespace verwendet.

Hinweis

Auf Ihrem Computer werden möglicherweise unterschiedliche Namen oder Speicherorte für einige der Visual Studio-Benutzeroberflächenelemente in den folgenden Anweisungen angezeigt. Die Visual Studio-Edition, über die Sie verfügen, und die Einstellungen, die Sie verwenden, bestimmen diese Elemente. Weitere Informationen finden Sie unter Personalisierung der IDE.

So erstellen Sie das Projekt

  1. Klicken Sie im Menü Datei auf Neues Projekt.

    Das Dialogfeld Neues Projekt wird angezeigt.

  2. Erweitern Sie im Bereich "Installierte Vorlagen " Visual Basic, und klicken Sie dann auf Windows. Klicken Sie im Bereich "Vorlagen " in der Mitte auf "Windows Forms-Anwendung".

  3. Geben Sie im FileExplorer" den Projektnamen ein, und klicken Sie dann auf "OK".

    Visual Studio fügt das Projekt dem Projektmappen-Explorer hinzu, und der Windows Forms-Designer wird geöffnet.

  4. Fügen Sie die Steuerelemente in der folgenden Tabelle zum Formular hinzu, und legen Sie die entsprechenden Werte für ihre Eigenschaften fest.

    Steuerung Eigentum Wert
    ListBox Name filesListBox
    Schaltfläche Name

    Text
    browseButton

    Durchsuchen
    Schaltfläche Name

    Text
    examineButton

    Untersuchen
    CheckBox Name

    Text
    saveCheckBox

    Ergebnisse speichern
    FolderBrowserDialog Name FolderBrowserDialog1

So wählen Sie einen Ordner aus, und listen Sie Dateien in einem Ordner auf

  1. Erstellen Sie einen Click-Ereignishandler für browseButton, indem Sie auf ein Steuerelement im Formular doppelklicken. Der Code-Editor wird geöffnet.

  2. Fügen Sie dem Click Ereignishandler den folgenden Code hinzu.

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

    Der FolderBrowserDialog1.ShowDialog Aufruf öffnet das Dialogfeld " Nach Ordner suchen". Nachdem der Benutzer auf "OK" geklickt hat, wird die SelectedPath Eigenschaft als Argument an die ListFiles Methode gesendet, die im nächsten Schritt hinzugefügt wird.

  3. Fügen Sie die folgende ListFiles Methode hinzu.

    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
    

    Dieser Code löscht zuerst die ListBox.

    Die GetFiles Methode ruft dann eine Sammlung von Zeichenfolgen ab, eine für jede Datei im Verzeichnis. Die GetFiles Methode akzeptiert ein Suchmusterargument, um Dateien abzurufen, die einem bestimmten Muster entsprechen. In diesem Beispiel werden nur Dateien mit der Erweiterung .txt zurückgegeben.

    Die von der GetFiles Methode zurückgegebenen Zeichenfolgen werden dann dem ListBox-Objekt hinzugefügt.

  4. Führen Sie die Anwendung aus. Wählen Sie die Schaltfläche Durchsuchen aus. Navigieren Sie im Dialogfeld " Nach Ordner suchen" zu einem Ordner, der .txt Dateien enthält, und wählen Sie dann den Ordner aus, und klicken Sie auf "OK".

    Das ListBox Enthält eine Liste der .txt Dateien im ausgewählten Ordner.

  5. Beenden Sie die Ausführung der Anwendung.

So rufen Sie Attribute einer Datei und Inhalte aus einer Textdatei ab

  1. Erstellen Sie einen Click-Ereignishandler für examineButton, indem Sie auf ein Steuerelement im Formular doppelklicken.

  2. Fügen Sie dem Click Ereignishandler den folgenden Code hinzu.

    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)
    

    Der Code überprüft, ob ein Element in der ListBoxDatei ausgewählt ist. Anschließend wird der Dateipfadeintrag aus der ListBoxDatei abgerufen. Die FileExists Methode wird verwendet, um zu überprüfen, ob die Datei noch vorhanden ist.

    Der Dateipfad wird als Argument an die GetTextForOutput Methode gesendet, die im nächsten Schritt hinzugefügt wird. Diese Methode gibt eine Zeichenfolge zurück, die Dateiinformationen enthält. Die Dateiinformationen werden in einem MessageBox-Objekt angezeigt.

  3. Fügen Sie die folgende GetTextForOutput Methode hinzu.

    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
    

    Der Code verwendet die GetFileInfo Methode zum Abrufen von Dateiparametern. Die Dateiparameter werden einem StringBuilder hinzugefügt.

    Die OpenTextFileReader Methode liest den Dateiinhalt in eine StreamReader. Die erste Zeile des Inhalts wird aus dem StreamReader entnommen und dem StringBuilder hinzugefügt.

  4. Führen Sie die Anwendung aus. Klicken Sie auf "Durchsuchen", und navigieren Sie zu einem Ordner, der .txt Dateien enthält. Klicke auf OK.

    Wählen Sie in der ListBoxDatei eine Datei aus, und klicken Sie dann auf "Überprüfen". Ein MessageBox zeigt die Dateiinformationen.

  5. Beenden Sie die Ausführung der Anwendung.

So fügen Sie einen Protokolleintrag hinzu

  1. Fügen Sie den folgenden Code am Ende des examineButton_Click Ereignishandlers hinzu.

    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
    

    Der Code legt den Protokolldateipfad fest, um die Protokolldatei im selben Verzeichnis wie die der ausgewählten Datei zu platzieren. Der Text des Protokolleintrags wird auf das aktuelle Datum und die aktuelle Uhrzeit festgelegt, gefolgt von den Dateiinformationen.

    Zum Erstellen des Protokolleintrags wird die WriteAllText-Methode verwendet, deren append-Argument auf True festgelegt ist.

  2. Führen Sie die Anwendung aus. Navigieren Sie zu einer Textdatei, aktivieren Sie sie im ListBoxKontrollkästchen " Ergebnisse speichern ", und klicken Sie dann auf "Überprüfen". Überprüfen Sie, ob der Protokolleintrag in die log.txt Datei geschrieben wurde.

  3. Beenden Sie die Ausführung der Anwendung.

So verwenden Sie das aktuelle Verzeichnis

  1. Erstellen Sie einen Ereignishandler für Form1_Load, indem Sie auf das Formular doppelklicken.

  2. Fügen Sie dem Ereignishandler den folgenden Code hinzu.

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

    Dieser Code legt das Standardverzeichnis des Ordnerbrowsers auf das aktuelle Verzeichnis fest.

  3. Führen Sie die Anwendung aus. Wenn Sie zum ersten Mal auf "Durchsuchen " klicken, wird das Dialogfeld " Nach Ordner suchen" im aktuellen Verzeichnis geöffnet.

  4. Beenden Sie die Ausführung der Anwendung.

So aktivieren Sie Steuerelemente selektiv

  1. Fügen Sie die folgende SetEnabled Methode hinzu.

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

    Die SetEnabled Methode aktiviert oder deaktiviert Steuerelemente, abhängig davon, ob ein Element in der ListBox ausgewählt ist.

  2. Erstellen Sie einen SelectedIndexChanged Ereignishandler für filesListBox, indem Sie auf das ListBox Steuerelement im Formular doppelklicken.

  3. Fügen Sie einen Aufruf für SetEnabled im neuen Ereignishandler filesListBox_SelectedIndexChanged hinzu.

  4. Fügen Sie am Ende des Ereignishandlers SetEnabled einen Aufruf von browseButton_Click hinzu.

  5. Fügen Sie am Ende des Ereignishandlers SetEnabled einen Aufruf von Form1_Load hinzu.

  6. Führen Sie die Anwendung aus. Das Kontrollkästchen Ergebnisse speichern und die Schaltfläche Überprüfen sind deaktiviert, wenn kein Element in der ListBox ausgewählt ist.

Vollständiges Beispiel mit My.Computer.FileSystem

Im Folgenden sehen Sie das vollständige Beispiel.


' 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

Vollständiges Beispiel mit System.IO

Im folgenden äquivalenten Beispiel werden Klassen aus dem System.IO Namespace anstelle von My.Computer.FileSystem Objekten verwendet.


' 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

Siehe auch