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.
Tipp
Ihr Computer zeigt möglicherweise für einige der Elemente der Visual Studio-Benutzeroberfläche in der folgenden Anleitung andere Namen oder Standorte an. Diese Elemente sind von der jeweiligen Visual Studio-Version und den verwendeten Einstellungen abhängig. Weitere Informationen finden Sie unter Visual Studio-Einstellungen.
So erstellen Sie das Projekt
Klicken Sie im Menü Datei auf Neues Projekt.
Das Dialogfeld Neues Projekt wird angezeigt.
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.
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.
Fügen Sie dem Formular die in der folgenden Tabelle genannten Steuerelemente hinzu, und legen Sie deren Eigenschaften wie beschrieben fest.
Steuerelement
Property
Value
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
Erstellen Sie einen Click-Ereignishandler für browseButton, indem Sie auf das Steuerelement im Formular doppelklicken. Der Code-Editor wird geöffnet.
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.
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.
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.
Halten Sie die Anwendung an.
So rufen Sie Attribute einer Datei und Inhalt aus einer Textdatei ab
Erstellen Sie einen Click-Ereignishandler für examineButton, indem Sie auf das Steuerelement im Formular doppelklicken.
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.
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.
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.
Halten Sie die Anwendung an.
So fügen Sie einen Protokolleintrag hinzu
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.
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.
Halten Sie die Anwendung an.
So verwenden Sie das aktuelle Verzeichnis
Erstellen Sie einen Ereignishandler für Form1_Load, indem Sie auf das Formular doppelklicken.
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.
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.
Halten Sie die Anwendung an.
So aktivieren Sie selektiv Steuerelemente
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.
Erstellen Sie einen SelectedIndexChanged-Ereignishandler für filesListBox, indem Sie auf das ListBox-Steuerelement auf dem Formular doppelklicken.
Fügen Sie SetEnabled im neuen filesListBox_SelectedIndexChanged-Ereignishandler einen Aufruf hinzu.
Fügen Sie SetEnabled einen Aufruf am Ende des browseButton_Click-Ereignishandlers hinzu.
Fügen Sie SetEnabled einen Aufruf am Ende des Form1_Load-Ereignishandlers hinzu.
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
Änderungsprotokoll
Datum |
Versionsgeschichte |
Grund |
---|---|---|
Dezember 2010 |
Überarbeitete Beispiele und exemplarische Vorgehensweise. |
Erweiterung |
August 2010 |
Aktualisierter und korrigierter Beispielcode. |
Kundenfeedback. |