Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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
Klicken Sie im Menü Datei auf Neues Projekt.
Das Dialogfeld Neues Projekt wird angezeigt.
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".
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.
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 filesListBoxSchaltfläche Name
TextbrowseButton
DurchsuchenSchaltfläche Name
TextexamineButton
UntersuchenCheckBox Name
TextsaveCheckBox
Ergebnisse speichernFolderBrowserDialog Name FolderBrowserDialog1
So wählen Sie einen Ordner aus, und listen Sie Dateien in einem Ordner auf
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
ClickEreignishandler den folgenden Code hinzu.If FolderBrowserDialog1.ShowDialog() = DialogResult.OK Then ' List files in the folder. ListFiles(FolderBrowserDialog1.SelectedPath) End IfDer
FolderBrowserDialog1.ShowDialogAufruf öffnet das Dialogfeld " Nach Ordner suchen". Nachdem der Benutzer auf "OK" geklickt hat, wird die SelectedPath Eigenschaft als Argument an dieListFilesMethode gesendet, die im nächsten Schritt hinzugefügt wird.Fügen Sie die folgende
ListFilesMethode 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 SubDieser Code löscht zuerst die ListBox.
Die GetFiles Methode ruft dann eine Sammlung von Zeichenfolgen ab, eine für jede Datei im Verzeichnis. Die
GetFilesMethode 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
GetFilesMethode zurückgegebenen Zeichenfolgen werden dann dem ListBox-Objekt hinzugefügt.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
ListBoxEnthält eine Liste der .txt Dateien im ausgewählten Ordner.Beenden Sie die Ausführung der Anwendung.
So rufen Sie Attribute einer Datei und Inhalte aus einer Textdatei ab
Erstellen Sie einen
Click-Ereignishandler fürexamineButton, indem Sie auf ein Steuerelement im Formular doppelklicken.Fügen Sie dem
ClickEreignishandler 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 derListBoxDatei abgerufen. Die FileExists Methode wird verwendet, um zu überprüfen, ob die Datei noch vorhanden ist.Der Dateipfad wird als Argument an die
GetTextForOutputMethode 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.Fügen Sie die folgende
GetTextForOutputMethode 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 FunctionDer 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
StreamReaderentnommen und demStringBuilderhinzugefügt.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". EinMessageBoxzeigt die Dateiinformationen.Beenden Sie die Ausführung der Anwendung.
So fügen Sie einen Protokolleintrag hinzu
Fügen Sie den folgenden Code am Ende des
examineButton_ClickEreignishandlers 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 IfDer 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 aufTruefestgelegt ist.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 dielog.txtDatei geschrieben wurde.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 den folgenden Code hinzu.
' Set the default directory of the folder browser to the current directory. FolderBrowserDialog1.SelectedPath = My.Computer.FileSystem.CurrentDirectoryDieser Code legt das Standardverzeichnis des Ordnerbrowsers auf das aktuelle Verzeichnis fest.
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.
Beenden Sie die Ausführung der Anwendung.
So aktivieren Sie Steuerelemente selektiv
Fügen Sie die folgende
SetEnabledMethode hinzu.Private Sub SetEnabled() Dim anySelected As Boolean = (filesListBox.SelectedItem IsNot Nothing) examineButton.Enabled = anySelected saveCheckBox.Enabled = anySelected End SubDie
SetEnabledMethode aktiviert oder deaktiviert Steuerelemente, abhängig davon, ob ein Element in derListBoxausgewählt ist.Erstellen Sie einen
SelectedIndexChangedEreignishandler fürfilesListBox, indem Sie auf dasListBoxSteuerelement im Formular doppelklicken.Fügen Sie einen Aufruf für
SetEnabledim neuen EreignishandlerfilesListBox_SelectedIndexChangedhinzu.Fügen Sie am Ende des Ereignishandlers
SetEnabledeinen Aufruf vonbrowseButton_Clickhinzu.Fügen Sie am Ende des Ereignishandlers
SetEnabledeinen Aufruf vonForm1_Loadhinzu.Führen Sie die Anwendung aus. Das Kontrollkästchen Ergebnisse speichern und die Schaltfläche Überprüfen sind deaktiviert, wenn kein Element in der
ListBoxausgewä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