Freigeben über


Exemplarische Vorgehensweise: Bearbeiten von Dateien und Verzeichnissen in Visual Basic

Diese exemplarische Vorgehensweise bietet Ihnen eine Einführung in die Grundlagen der Datei-E/A in Visual Basic. Sie beschreibt, wie eine kleine Anwendung erstellt wird, von der Textdateien in einem Verzeichnis aufgeführt und überprüft werden. Für alle markierten Textdateien werden von der Anwendung Dateiattribute und die erste Zeile des Inhalts bereitgestellt. Eine Option zum Schreiben von Informationen in eine Protokolldatei steht zur Verfügung.

Diese exemplarische Vorgehensweise verwendet Mitglieder von My.Computer.FileSystem Object, 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 vom System.IO-Namespace verwendet.

Hinweis

Auf Ihrem Computer werden möglicherweise andere Namen oder Speicherorte für die Benutzeroberflächenelemente von Visual Studio angezeigt als die in den folgenden Anweisungen aufgeführten. Diese Elemente sind von der jeweiligen Visual Studio-Version und den verwendeten Einstellungen abhängig. Weitere Informationen finden Sie unter Anpassen der Entwicklungseinstellungen in Visual Studio.

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 den Eintrag Visual Basic, und klicken Sie dann auf Windows. Klicken Sie in der Mitte im Bereich Vorlagen auf Windows Forms-Anwendung.

  3. Geben Sie im Feld Name die Bezeichnung FileExplorer ein, um den Projektnamen festzulegen, und klicken Sie dann auf OK.

    Das Projekt wird von Visual Studio dem Projektmappen-Explorer hinzugefügt, und der Windows Forms-Designer wird geöffnet.

  4. Fügen Sie dem Formular die in der folgenden Tabelle genannten Steuerelemente hinzu, und legen Sie deren Eigenschaften wie beschrieben fest.

    Steuerelement

    Property

    Wert

    ListBox

    Name

    filesListBox

    Button

    Name

    Text

    browseButton

    Durchsuchen

    Button

    Name

    Text

    examineButton

    Examine

    CheckBox

    Name

    Text

    saveCheckBox

    Save Results

    FolderBrowserDialog

    Name

    FolderBrowserDialog1

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

  1. Erstellen Sie einen Click-Ereignishandler für browseButton, indem Sie auf das 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
    

    Mit dem FolderBrowserDialog1.ShowDialog-Aufruf wird das Dialogfeld Ordner suchen geöffnet. Nach dem Klicken auf OK 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
    

    Mit diesem Code wird zuerst ListBox gelöscht.

    Die GetFiles-Methode ruft dann eine Auflistung von Zeichenfolgen ab, und zwar eine für jede Datei im Verzeichnis. Die GetFiles-Methode akzeptiert ein Suchmusterargument zum Abrufen von Dateien, 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 zu ListBox hinzugefügt.

  4. Führen Sie die Anwendung aus. Klicken Sie auf die Schaltfläche Durchsuchen. Navigieren Sie im Dialogfeld Ordner suchen zu einem Ordner, der TXT-Dateien enthält. Markieren Sie dann diesen Ordner, und klicken Sie auf OK.

    ListBox enthält eine Liste der TXT-Dateien im ausgewählten Ordner.

  5. Halten Sie die Anwendung an.

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

  1. Erstellen Sie einen Click-Ereignishandler für examineButton, indem Sie auf das 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 ListBox ausgewählt ist. Anschließend wird der Dateipfadeintrag aus ListBox abgerufen. Mithilfe der FileExists-Methode wird überprüft, ob die Datei noch vorhanden ist.

    Der Dateipfad wird als Argument an die GetTextForOutput-Methode gesendet, die im nächsten Schritt hinzugefügt wird. Mit dieser Methode wird eine Zeichenfolge zurückgegeben, die Dateiinformationen enthält. Die Dateiinformationen werden in MessageBox 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 ruft mithilfe der GetFileInfo-Methode Dateiparameter ab. Die Dateiparameter werden zu StringBuilder hinzugefügt.

    Die OpenTextFileReader-Methode liest den Dateiinhalt in StreamReader ein. Die erste Zeile des Inhalts wird von StreamReader abgerufen und zu 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. Klicken Sie auf OK.

    Wählen Sie eine Datei in ListBox aus, und klicken Sie anschließend auf die Schaltfläche zum Überprüfen. In MessageBox werden die Dateiinformationen angezeigt.

  5. Halten Sie die Anwendung an.

So fügen Sie einen Protokolleintrag hinzu

  1. Fügen Sie am Ende des examineButton_Click-Ereignishandlers folgenden Code 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
    

    Vom Code wird der Protokolldateipfad festgelegt, damit die Protokolldatei im selben Verzeichnis abgelegt wird wie die ausgewählte Datei. Für den Text des Protokolleintrags wird das aktuelle Datum und die aktuelle Uhrzeit festgelegt, gefolgt von den Dateiinformationen.

    Die WriteAllText-Methode, für die das append-Argument auf True festgelegt ist, wird zum Erstellen des Protokolleintrags verwendet.

  2. Führen Sie die Anwendung aus. Navigieren Sie zu einer Textdatei, und wählen Sie sie in ListBox aus. Aktivieren Sie das Kontrollkästchen Ergebnisse speichern, und klicken Sie anschließend auf die Schaltfläche zum Überprüfen. Überprüfen Sie, ob der Protokolleintrag in die log.txt-Datei geschrieben wird.

  3. Halten Sie die Anwendung an.

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 folgenden Code hinzu:

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

    Mit diesem Code wird für das Standardverzeichnis des Ordnerbrowsers das aktuelle Verzeichnis festgelegt.

  3. Führen Sie die Anwendung aus. Wenn Sie das erste Mal auf Durchsuchen klicken, wird das Dialogfeld Ordner suchen mit dem aktuellen Verzeichnis geöffnet.

  4. Halten Sie die Anwendung an.

So aktivieren Sie selektiv Steuerelemente

  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 ListBox ausgewählt wird.

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

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

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

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

  6. Führen Sie die Anwendung aus. Das Kontrollkästchen Ergebnisse speichern und die Schaltfläche zum Überprüfen werden deaktiviert, wenn ein Element nicht im ListBox ausgewählt wird.

Vollständiges Beispiel für My.Computer.FileSystem

Nachfolgend ist das vollständige Beispiel angegeben:

    ' 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 für System.IO

Im folgenden entsprechenden Beispiel werden Klassen vom 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

Aufgaben

Exemplarische Vorgehensweise: Bearbeiten von Dateien mit .NET Framework-Methoden (Visual Basic)

Referenz

System.IO

FileSystem

CurrentDirectory