Exemplarische Vorgehensweise: Bearbeiten von Dateien und Verzeichnissen in Visual BasicWalkthrough: Manipulating Files and Directories in Visual Basic

Diese exemplarische Vorgehensweise enthält eine Einführung in die Grundlagen der Datei-E/A in Visual BasicVisual Basic.This walkthrough provides an introduction to the fundamentals of file I/O in Visual BasicVisual Basic. Es wird beschrieben, wie Sie eine kleine Anwendung erstellen können, in der Textdateien in einem Verzeichnis aufgelistet und überprüft werden.It describes how to create a small application that lists and examines text files in a directory. Die Anwendung stellt Dateiattribute und die erste Zeile des Inhalts jeder ausgewählten Textdatei zur Verfügung.For each selected text file, the application provides file attributes and the first line of content. Es besteht die Möglichkeit, Informationen in eine Protokolldatei zu schreiben.There is an option to write information to a log file.

In dieser exemplarischen Vorgehensweise werden Member von My.Computer.FileSystem Object verwendet, die unter Visual BasicVisual Basic verfügbar sind.This walkthrough uses members of the My.Computer.FileSystem Object, which are available in Visual BasicVisual Basic. Weitere Informationen finden Sie unter FileSystem.See FileSystem for more information. Am Ende dieser exemplarischen Vorgehensweise finden Sie ein entsprechendes Beispiel, in dem Klassen aus dem Namespace System.IO verwendet werden.At the end of the walkthrough, an equivalent example is provided that uses classes from the System.IO namespace.

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.Your computer might show different names or locations for some of the Visual Studio user interface elements in the following instructions. Diese Elemente sind von der jeweiligen Visual Studio-Version und den verwendeten Einstellungen abhängig.The Visual Studio edition that you have and the settings that you use determine these elements. Weitere Informationen finden Sie unter Personalisieren der IDE.For more information, see Personalizing the IDE.

So erstellen Sie das ProjektTo create the project

  1. Klicken Sie im Menü Datei auf Neues Projekt.On the File menu, click New Project.

    Das Dialogfeld Neues Projekt wird angezeigt.The New Project dialog box appears.

  2. Erweitern Sie im Bereich Installierte Vorlagen Visual Basic, und klicken Sie dann auf Windows.In the Installed Templates pane, expand Visual Basic, and then click Windows. Klicken Sie im Bereich Vorlagen auf Windows Forms-Anwendung.In the Templates pane in the middle, click Windows Forms Application.

  3. Geben Sie im Feld Name FileExplorer ein, um den Projektnamen festzulegen, und klicken Sie anschließend auf OK.In the Name box, type FileExplorer to set the project name, and then click OK.

    Visual StudioVisual Studio fügt das Projekt zum Projektmappen-Explorer hinzu. Der Windows Forms-Designer wird geöffnet. adds the project to Solution Explorer, and the Windows Forms Designer opens.

  4. Fügen Sie die Steuerelemente aus der folgenden Tabelle zum Formular hinzu, und legen Sie die entsprechenden Werte für die Eigenschaften fest.Add the controls in the following table to the form, and set the corresponding values for their properties.

    SteuerelementControl EigenschaftProperty WertValue
    ListBoxListBox NameName filesListBox
    Button (Schaltfläche)Button NameName

    TextText
    browseButton

    Browse (Durchsuchen)Browse
    Button (Schaltfläche)Button NameName

    TextText
    examineButton

    Examine (Untersuchen)Examine
    CheckBoxCheckBox NameName

    TextText
    saveCheckBox

    Save Results (Ergebnisse speichern)Save Results
    FolderBrowserDialogFolderBrowserDialog NameName FolderBrowserDialog1

So wählen Sie einen Ordner und Listendateien in einem Ordner ausTo select a folder, and list files in a folder

  1. Erstellen Sie einen Click-Ereignishandler für browseButton, indem Sie auf ein Steuerelement im Formular doppelklicken.Create a Click event handler for browseButton by double-clicking the control on the form. Der Code-Editor wird geöffnet.The Code Editor opens.

  2. Fügen Sie dem Click-Ereignishandler den folgenden Code hinzu.Add the following code to the Click event handler.

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

    Mit dem Aufruf FolderBrowserDialog1.ShowDialog wird das Dialogfeld Ordner suchen geöffnet.The FolderBrowserDialog1.ShowDialog call opens the Browse For Folder dialog box. Sobald der Benutzer auf OK klickt, wird die SelectedPath-Eigenschaft als Argument an die ListFiles-Methode gesendet, die im nächsten Schritt hinzugefügt wird.After the user clicks OK, the SelectedPath property is sent as an argument to the ListFiles method, which is added in the next step.

  3. Fügen Sie die folgende ListFiles-Methode hinzu.Add the following ListFiles method.

    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 ListBox.This code first clears the ListBox.

    Die GetFiles-Methode ruft anschließend eine Auflistung von Zeichenfolgen ab, eine für jede Datei im Verzeichnis.The GetFiles method then retrieves a collection of strings, one for each file in the directory. Die Methode GetFiles akzeptiert ein Suchmusterargument, um Dateien abzurufen, die mit einem bestimmten Muster übereinstimmen.The GetFiles method accepts a search pattern argument to retrieve files that match a particular pattern. In diesem Beispiel werden nur Dateien mit der Dateiendung „.txt“ zurückgegeben.In this example, only files that have the extension .txt are returned.

    Die Zeichenfolgen, die von der Methode GetFiles zurückgegeben werden, werden anschließend zu ListBox hinzugefügt.The strings that are returned by the GetFiles method are then added to the ListBox.

  4. Führen Sie die Anwendung aus.Run the application. Klicken Sie auf die Schaltfläche Durchsuchen.Click the Browse button. Navigieren Sie im Dialogfeld Ordner suchen zu einem Ordner, der .txt-Dateien enthält. Wählen Sie den Ordner anschließend aus, und klicken Sie auf OK.In the Browse For Folder dialog box, browse to a folder that contains .txt files, and then select the folder and click OK.

    ListBox enthält eine Liste von .txt-Dateien im ausgewählten Ordner.The ListBox contains a list of .txt files in the selected folder.

  5. Beenden Sie die Ausführung der Anwendung.Stop running the application.

So rufen Sie Attribute einer Datei und Inhalt einer Textdatei abTo obtain attributes of a file, and content from a text file

  1. Erstellen Sie einen Click-Ereignishandler für examineButton, indem Sie auf ein Steuerelement im Formular doppelklicken.Create a Click event handler for examineButton by double-clicking the control on the form.

  2. Fügen Sie dem Click-Ereignishandler den folgenden Code hinzu.Add the following code to the Click event 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)
    

    Der Code stellt sicher, dass ein Element in ListBox ausgewählt ist.The code verifies that an item is selected in the ListBox. Anschließend ruft er den Eintrag des Dateipfads aus ListBox ab.It then obtains the file path entry from the ListBox. Die FileExists-Methode wird verwendet, um zu überprüfen, ob die Datei noch vorhanden ist.The FileExists method is used to check whether the file still exists.

    Der Dateipfad wird als Argument an die GetTextForOutput-Methode gesendet, die im nächsten Schritt hinzugefügt wird.The file path is sent as an argument to the GetTextForOutput method, which is added in the next step. Diese Methode gibt eine Zeichenfolge zurück, die Dateiinformationen enthält.This method returns a string that contains file information. Die Dateiinformationen werden in einer MessageBox angezeigt.The file information appears in a MessageBox.

  3. Fügen Sie die folgende GetTextForOutput-Methode hinzu.Add the following GetTextForOutput method.

    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.The code uses the GetFileInfo method to obtain file parameters. Die Dateiparameter werden einem StringBuilder hinzugefügt.The file parameters are added to a StringBuilder.

    Die OpenTextFileReader-Methode liest den Dateiinhalt in ein StreamReader-Element aus.The OpenTextFileReader method reads the file contents into a StreamReader. Die erste Zeile des Inhalts wird von StreamReader abgerufen und zu StringBuilder hinzugefügt.The first line of the contents is obtained from the StreamReader and is added to the StringBuilder.

  4. Führen Sie die Anwendung aus.Run the application. Klicken Sie auf Durchsuchen, und suchen Sie nach einem Ordner, der .txt-Dateien enthält.Click Browse, and browse to a folder that contains .txt files. Klicken Sie auf OK.Click OK.

    Wählen Sie eine Datei aus ListBox aus, und klicken Sie anschließend auf Examine (Untersuchen).Select a file in the ListBox, and then click Examine. Die Dateiinformationen werden von MessageBox angezeigt.A MessageBox shows the file information.

  5. Beenden Sie die Ausführung der Anwendung.Stop running the application.

So fügen Sie einen Protokolleintrag hinzuTo add a log entry

  1. Fügen Sie am Ende des examineButton_Click-Ereignishandlers folgenden Code hinzu.Add the following code to the end of the examineButton_Click event 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
    

    Der Protokolldateipfad wird vom Code so festgelegt, dass die Protokolldatei in dem Verzeichnis gespeichert wird, das auch das Verzeichnis der ausgewählten Datei ist.The code sets the log file path to put the log file in the same directory as that of the selected file. Der Text der Protokolldatei wird auf das aktuelle Datum und die Uhrzeit sowie die Dateiinformationen festgelegt.The text of the log entry is set to the current date and time followed by the file information.

    Zum Erstellen des Protokolleintrags wird die WriteAllText-Methode verwendet, deren append-Argument auf True festgelegt ist.The WriteAllText method, with the append argument set to True, is used to create the log entry.

  2. Führen Sie die Anwendung aus.Run the application. Navigieren Sie zu einer Textdatei, wählen Sie diese in ListBox aus, aktivieren Sie das Kontrollkästchen Save Results (Ergebnisse speichern), und klicken Sie auf Examine (Untersuchen).Browse to a text file, select it in the ListBox, select the Save Results check box, and then click Examine. Stellen Sie sicher, dass der Protokolleintrag in die log.txt-Datei geschrieben ist.Verify that the log entry is written to the log.txt file.

  3. Beenden Sie die Ausführung der Anwendung.Stop running the application.

So verwenden Sie das aktuelle VerzeichnisTo use the current directory

  1. Erstellen Sie einen Ereignishandler für Form1_Load, indem Sie auf das Formular doppelklicken.Create an event handler for Form1_Load by double-clicking the form.

  2. Fügen Sie dem Ereignishandler folgenden Code hinzu.Add the following code to the event handler.

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

    Durch diesen Code wird das Standardverzeichnis auf den Browser des Ordners zum aktuellen Verzeichnis festgelegt.This code sets the default directory of the folder browser to the current directory.

  3. Führen Sie die Anwendung aus.Run the application. Wenn Sie zum ersten Mal auf Durchsuchen klicken, wird das Dialogfeld Ordner suchen im aktuellen Verzeichnis geöffnet.When you click Browse the first time, the Browse For Folder dialog box opens to the current directory.

  4. Beenden Sie die Ausführung der Anwendung.Stop running the application.

So aktivieren Sie Steuerelemente selektivTo selectively enable controls

  1. Fügen Sie die folgende SetEnabled-Methode hinzu.Add the following SetEnabled method.

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

    Die Methode SetEnabled aktiviert oder deaktiviert Steuerelemente. Dies hängt davon ab, ob ein Element in ListBox ausgewählt ist.The SetEnabled method enables or disables controls depending on whether an item is selected in the ListBox.

  2. Erstellen Sie einen SelectedIndexChanged-Ereignishandler für filesListBox, indem Sie auf das Steuerelement ListBox im Formular doppelklicken.Create a SelectedIndexChanged event handler for filesListBox by double-clicking the ListBox control on the form.

  3. Fügen Sie im Ereignishandler filesListBox_SelectedIndexChanged einen Aufruf von SetEnabled hinzu.Add a call to SetEnabled in the new filesListBox_SelectedIndexChanged event handler.

  4. Fügen Sie am Ende des Ereignishandlers browseButton_Click einen Aufruf von SetEnabled hinzu.Add a call to SetEnabled at the end of the browseButton_Click event handler.

  5. Fügen Sie am Ende des Ereignishandlers Form1_Load einen Aufruf von SetEnabled hinzu.Add a call to SetEnabled at the end of the Form1_Load event handler.

  6. Führen Sie die Anwendung aus.Run the application. Das Kontrollkästchen Save Results (Ergebnisse speichern) und die Schaltfläche Examine (Untersuchen) sind deaktiviert, wenn ein Element nicht in ListBox ausgewählt ist.The Save Results check box and the Examine button are disabled if an item is not selected in the ListBox.

Ausführliches Beispiel mit Verwendung von „My.Computer.FileSystem“Full example using My.Computer.FileSystem

Im Folgenden sehen Sie das vollständige Beispiel.Following is the complete example.


' 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

Ausführliches Beispiel mit Verwendung von „System.IO“Full example using System.IO

Im folgenden entsprechenden Beispiel werden Klassen aus dem Namespace System.IO anstelle von My.Computer.FileSystem-Objekten verwendet.The following equivalent example uses classes from the System.IO namespace instead of using My.Computer.FileSystem objects.


' 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 auchSee Also

System.IO
FileSystem
CurrentDirectory
Exemplarische Vorgehensweise: Bearbeiten von Dateien mit .NET Framework-MethodenWalkthrough: Manipulating Files by Using .NET Framework Methods