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 filesListBox
Schaltflä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
Click
Ereignishandler den folgenden Code hinzu.If FolderBrowserDialog1.ShowDialog() = DialogResult.OK Then ' List files in the folder. ListFiles(FolderBrowserDialog1.SelectedPath) End If
Der
FolderBrowserDialog1.ShowDialog
Aufruf öffnet das Dialogfeld " Nach Ordner suchen". Nachdem der Benutzer auf "OK" geklickt hat, 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 die ListBox.
Die GetFiles Methode ruft dann eine Sammlung von Zeichenfolgen ab, eine für jede Datei im Verzeichnis. Die
GetFiles
Methode 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
GetFiles
Methode 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
ListBox
Enthä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
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 der
ListBox
Datei ausgewählt ist. Anschließend wird der Dateipfadeintrag aus derListBox
Datei abgerufen. 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 einem MessageBox-Objekt 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 eine StreamReader. Die erste Zeile des Inhalts wird aus dem
StreamReader
entnommen und demStringBuilder
hinzugefü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
ListBox
Datei eine Datei aus, und klicken Sie dann auf "Überprüfen". EinMessageBox
zeigt 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_Click
Ereignishandlers 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 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 aufTrue
festgelegt ist.Führen Sie die Anwendung aus. Navigieren Sie zu einer Textdatei, aktivieren Sie sie im
ListBox
Kontrollkästchen " Ergebnisse speichern ", und klicken Sie dann auf "Überprüfen". Überprüfen Sie, ob der Protokolleintrag in dielog.txt
Datei 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.CurrentDirectory
Dieser 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
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 derListBox
ausgewählt ist.Erstellen Sie einen
SelectedIndexChanged
Ereignishandler fürfilesListBox
, indem Sie auf dasListBox
Steuerelement im Formular doppelklicken.Fügen Sie einen Aufruf für
SetEnabled
im neuen EreignishandlerfilesListBox_SelectedIndexChanged
hinzu.Fügen Sie am Ende des Ereignishandlers
SetEnabled
einen Aufruf vonbrowseButton_Click
hinzu.Fügen Sie am Ende des Ereignishandlers
SetEnabled
einen Aufruf vonForm1_Load
hinzu.Führen Sie die Anwendung aus. Das Kontrollkästchen Ergebnisse speichern und die Schaltfläche Überprüfen sind deaktiviert, wenn kein Element in der
ListBox
ausgewä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