Exemplarische Vorgehensweise: Bearbeiten von Dateien und Verzeichnissen in Visual Basic
Diese exemplarische Vorgehensweise enthält eine Einführung in die Grundlagen der Datei-E/A in Visual Basic. Es wird beschrieben, wie Sie eine kleine Anwendung erstellen können, in der Textdateien in einem Verzeichnis aufgelistet und überprüft werden. Die Anwendung stellt Dateiattribute und die erste Zeile des Inhalts jeder ausgewählten Textdatei zur Verfügung. Es besteht die Möglichkeit, Informationen in eine Protokolldatei zu schreiben.
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 dieser exemplarischen Vorgehensweise finden Sie ein entsprechendes Beispiel, in dem Klassen aus dem Namespace System.IO verwendet werden.
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 Personalisieren der IDE.
So erstellen Sie das Projekt
Klicken Sie im Menü Datei auf Neues Projekt.
Das Dialogfeld Neues Projekt wird angezeigt.
Erweitern Sie im Bereich Installierte VorlagenVisual Basic, und klicken Sie dann auf Windows. Klicken Sie im Bereich Vorlagen auf Windows Forms-Anwendung.
Geben Sie im Feld Name
FileExplorer
ein, um den Projektnamen festzulegen, und klicken Sie anschließend auf OK.Visual Studio fügt das Projekt in den Projektmappen-Explorer ein. Der Windows Forms-Designer wird geöffnet.
Fügen Sie die Steuerelemente aus der folgenden Tabelle zum Formular hinzu, und legen Sie die entsprechenden Werte für die Eigenschaften fest.
Control Eigenschaft Wert ListBox Name filesListBox
Schaltfläche Name
TextbrowseButton
DurchsuchenSchaltfläche Name
TextexamineButton
UntersuchenCheckBox Name
TextsaveCheckBox
Ergebnisse speichernFolderBrowserDialog Name FolderBrowserDialog1
So wählen Sie einen Ordner und Listendateien in einem Ordner aus
Erstellen Sie einen
Click
-Ereignishandler fürbrowseButton
, indem Sie auf ein 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 Aufruf
FolderBrowserDialog1.ShowDialog
wird das Dialogfeld Ordner suchen geöffnet. Sobald der Benutzer auf OK klickt, wird die SelectedPath-Eigenschaft als Argument an dieListFiles
-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
Dieser Code löscht zuerst ListBox.
Die GetFiles-Methode ruft anschließend eine Auflistung von Zeichenfolgen ab, eine für jede Datei im Verzeichnis. Die Methode
GetFiles
akzeptiert ein Suchmusterargument, um Dateien abzurufen, die mit einem bestimmten Muster übereinstimmen. In diesem Beispiel werden nur Dateien mit der Dateiendung „.txt“ zurückgegeben.Die Zeichenfolgen, die von der Methode
GetFiles
zurückgegeben werden, werden anschließend 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. Wählen Sie den Ordner anschließend aus, und klicken Sie auf OK.
ListBox
enthält eine Liste von .txt-Dateien im ausgewählten Ordner.Beenden Sie die Ausführung der Anwendung.
So rufen Sie Attribute einer Datei und Inhalt einer Textdatei ab
Erstellen Sie einen
Click
-Ereignishandler fürexamineButton
, indem Sie auf ein 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 stellt sicher, dass ein Element in
ListBox
ausgewählt ist. Anschließend ruft er den Eintrag des Dateipfads ausListBox
ab. 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 einer 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 verwendet die GetFileInfo-Methode zum Abrufen von Dateiparametern. Die Dateiparameter werden einem StringBuilder hinzugefügt.
Die OpenTextFileReader-Methode liest den Dateiinhalt in ein StreamReader-Element aus. Die erste Zeile des Inhalts wird von
StreamReader
abgerufen und zuStringBuilder
hinzugefügt.Führen Sie die Anwendung aus. Klicken Sie auf Durchsuchen, und suchen Sie nach einem Ordner, der .txt-Dateien enthält. Klicken Sie auf OK.
Wählen Sie eine Datei aus
ListBox
aus, und klicken Sie anschließend auf Examine (Untersuchen). Die Dateiinformationen werden vonMessageBox
angezeigt.Beenden Sie die Ausführung der Anwendung.
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
Der Protokolldateipfad wird vom Code so festgelegt, dass die Protokolldatei in dem Verzeichnis gespeichert wird, das auch das Verzeichnis der ausgewählten Datei ist. Der Text der Protokolldatei wird auf das aktuelle Datum und die Uhrzeit sowie die Dateiinformationen festgelegt.
Zum Erstellen des Protokolleintrags wird die WriteAllText-Methode verwendet, deren
append
-Argument aufTrue
festgelegt ist.Führen Sie die Anwendung aus. 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). Stellen Sie sicher, dass der Protokolleintrag in dielog.txt
-Datei geschrieben ist.Beenden Sie die Ausführung der Anwendung.
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
Durch diesen Code wird das Standardverzeichnis auf den Browser des Ordners zum aktuellen Verzeichnis festgelegt.
Führen Sie die Anwendung aus. Wenn Sie zum ersten Mal auf Durchsuchen klicken, wird das Dialogfeld Ordner suchen im aktuellen Verzeichnis geöffnet.
Beenden Sie die Ausführung der Anwendung.
So aktivieren Sie Steuerelemente selektiv
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 Methode
SetEnabled
aktiviert oder deaktiviert Steuerelemente. Dies hängt davon ab, ob ein Element inListBox
ausgewählt ist.Erstellen Sie einen
SelectedIndexChanged
-Ereignishandler fürfilesListBox
, indem Sie auf das SteuerelementListBox
im Formular doppelklicken.Fügen Sie im Ereignishandler
filesListBox_SelectedIndexChanged
einen Aufruf vonSetEnabled
hinzu.Fügen Sie am Ende des Ereignishandlers
browseButton_Click
einen Aufruf vonSetEnabled
hinzu.Fügen Sie am Ende des Ereignishandlers
Form1_Load
einen Aufruf vonSetEnabled
hinzu.Führen Sie die Anwendung aus. Das Kontrollkästchen Save Results (Ergebnisse speichern) und die Schaltfläche Examine (Untersuchen) sind deaktiviert, wenn ein Element nicht in
ListBox
ausgewählt ist.
Ausführliches Beispiel mit Verwendung von „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
Ausführliches Beispiel mit Verwendung von „System.IO“
Im folgenden entsprechenden Beispiel werden Klassen aus dem Namespace System.IO 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