Exemplarische Vorgehensweise: Bearbeiten von Dateien und Verzeichnissen in Visual Basic
Aktualisiert: November 2007
Diese exemplarische Vorgehensweise bietet Ihnen eine Einführung in die Grundlagen der Dateiein- und -ausgabe in Microsoft Visual Basic 2005. Zur Veranschaulichung der entsprechenden Features wird eine kleine Anwendung mit dem Namen FileExplorer erstellt, die Textdateien in einem Verzeichnis untersucht und Informationen wie Attribute, Zeitpunkt des letzten Zugriffs und die ersten 80 Zeichen der Datei zurückgibt. Sie enthält auch eine Option, mit der diese Informationen in eine Protokolldatei geschrieben werden.
Hinweis: |
---|
Die in einem Dialogfeld verfügbaren Optionen sowie die Namen und Positionen der angezeigten Menübefehle können sich je nach den persönlichen aktiven Einstellungen oder der verwendeten Version von den in der Hilfe beschriebenen Optionen unterscheiden. Diese Hilfeseite wurde unter Berücksichtigung der Option Allgemeine Entwicklungseinstellungen geschrieben. Klicken Sie im Menü Extras auf Einstellungen importieren und exportieren, um die Einstellungen zu ändern. Weitere Informationen finden Sie unter Visual Studio-Einstellungen. |
Erstellen der Anwendung
Um mit dem Projekt zu beginnen, erstellen Sie ein Formular, in dem die Benutzer ein Verzeichnis, eine Datei aus diesem Verzeichnis sowie die Informationen auswählen, die sie über die Datei erhalten möchten.
So erstellen Sie das Projekt
Klicken Sie im Menü Datei unter Neu auf den Befehl Projekt.
Das Dialogfeld Neues Projekt wird angezeigt.
Klicken Sie im Bereich Projekttypen auf Visual Basic-Projekte und im Bereich Vorlagen auf Windows-Anwendung.
Geben Sie im Feld Name den Projektnamen FileExplorer ein.
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.
Objekt
Eigenschaften
Wert
Name
Text
txtDirectory
Directory
Name
Text
btnSubmit
Submit
Name
Text
btnExamine
Examine
Name
Text
lstFilePick
Select A File
Name
Text
Checked
chkFileLength
File Length
True
Name
Text
Checked
chkLastAccess
Last Access Time
True
Name
Text
Checked
chkSave
Save Results
False
Anzeigen des aktuellen Verzeichnisses
Sie benötigen für die Anwendung FileExplorer einen Ausgangspunkt. Entsprechend verwendet die txtDirectoryTextBox die My.Computer.FileSystem.CurrentDirectory-Funktion, um eine Zeichenfolge für den aktuellen Pfad zurückzugeben und anzuzeigen.
So geben Sie das aktuelle Verzeichnis zurück
Erstellen Sie einen Ereignishandler für Form1_Load, indem Sie auf das Formular doppelklicken.
Der Code-Editor wird geöffnet.
Fügen Sie folgenden Code hinzu, sodass die txtDirectoryTextBox die aktuelle Position anzeigt.
txtDirectory.Text = My.Computer.FileSystem.CurrentDirectory
Führen Sie das Programm aus, um zu überprüfen, ob der richtige Pfad zurückgegeben wird.
Die TextBoxtxtDirectory zeigt das aktuelle Verzeichnis an.
Wechseln des Verzeichnisses
Da der Benutzer möglicherweise Dateien in einem anderen Verzeichnis auswählen möchte, wird in der Anwendung mit derselben Eigenschaft das Verzeichnis gewechselt. Um zu einem anderen Verzeichnis zu wechseln, gibt der Benutzer in der TextBoxtxtDirectory einen neuen Pfad ein.
So wechseln Sie das Verzeichnis
Erstellen Sie einen Click-Ereignishandler für btnSubmit, indem Sie auf das Steuerelement im Formular doppelklicken.
Der Code-Editor wird geöffnet.
Fügen Sie dem Click-Ereignishandler folgenden Code hinzu:
Dim NewPath As String ' NewPath holds the path the user has entered. NewPath = txtDirectory.Text ' Change the location to NewPath. My.Computer.FileSystem.CurrentDirectory = NewPath
Überprüfen, ob ein gültiger Pfad eingegeben wurde
Mithilfe einer Try...Catch-Anweisung können Sie Ausnahmen abfangen, die bei Eingabe eines leeren oder ungültigen Pfades ausgelöst werden.
So gewährleisten Sie die Angabe eines gültigen Pfades
Fügen Sie im btnSubmit_Click-Ereignis nach der Codezeile Dim NewPath As String den Code Dim ErrorMessage As String auf einer neuen Zeile ein.
Fügen Sie vor der Codezeile My.Computer.FileSystem.CurrentDirectory = NewPath eine Try-Anweisung in einer getrennten Zeile ein, wie weiter unten angegeben. Wenn Sie die EINGABETASTE drücken, fügt der Code-Editor automatisch die Catch ex As Exception-Anweisung und die End Try-Anweisung ein. Entfernen Sie diese. Sie fügen im nächsten Schritt selbst eine Anweisung ein.
Try
Fügen Sie nach der Codezeile My.Computer.FileSystem.CurrentDirectory = NewPath folgenden Code hinzu.
' This checks to make sure the path is not blank. Catch ex As Exception When NewPath = "" ErrorMessage = "You must enter a path." ' This catches errors caused by a path that is not valid. Catch ErrorMessage = "You must enter a valid path. If trying " & _ "to access a different drive, remember to include the drive " & _ "letter." Finally ' Display the error message only if one exists. If ErrorMessage <> Nothing Then MsgBox(ErrorMessage) End If End Try
Anzeigen des Verzeichnisinhalts in einem Kombinationsfeld
Wenn Sie den Inhalt des aktuellen Verzeichnisses anzeigen möchten, können Sie die My.Computer.FileSystem.GetFiles-Methode verwenden, die eine Auflistung von Zeichenfolgen zurückgibt, die die Namen der Dateien im Verzeichnis darstellen. Sie können für GetFiles Platzhalter verwenden, um nur Dateien auszuwählen, die einem bestimmten Muster entsprechen. In diesem Beispiel werden nur Dateien mit der Erweiterung .txt zurückgegeben.
So zeigen Sie den Verzeichnisinhalt an
Fügen Sie am Anfang des btnSubmit_Click-Ereignisses Folgendes ein.
Dim fileList As System.Collections.ObjectModel.ReadOnlyCollection(Of String).
Fügen Sie nach der Zeile End Try Folgendes ein.
fileList = My.Computer.FileSystem.GetFiles( _ My.Computer.FileSystem.CurrentDirectory, _ FileIO.SearchOption.SearchTopLevelOnly, "*.txt") For Each foundFile As String In fileList lstFilePick.Items.Add(foundFile) Next
Die abgerufenen Informationen werden in der lstFilePickComboBox angezeigt, in der Sie eine einzelne Datei zur weiteren Untersuchung auswählen können.
Testen Sie die Anwendung, indem Sie sie zunächst in einem Verzeichnis ausführen, das keine TXT‑Dateien enthält, und dann in einem Verzeichnis mit mehreren TXT‑Dateien. Im ersten Fall zeigt die Anwendung eine entsprechende Fehlermeldung an. Im zweiten Fall erstellt die Anwendung in der ComboBox eine Liste aller TXT-Dateien, die die txtDirectoryTextBox enthält.
Bereitstellen einer Möglichkeit, eine Datei zur Untersuchung auszuwählen
Die lstFilePickComboBox zeigt alle Dateien in einem Verzeichnis an. Der Benutzer möchte aber wahrscheinlich eine bestimmte Datei auswählen und untersuchen.
So ermöglichen Sie die Auswahl einer bestimmten Datei
Erstellen Sie einen Click-Ereignishandler für btnExamine_Click, und fügen Sie folgenden Code hinzu, um die Auswahl einer Datei zu bestätigen.
Dim thisFile As System.IO.FileInfo thisFile = My.Computer.FileSystem.GetFileInfo(CStr(lstFilePick.SelectedItem))
Bereitstellen einer Möglichkeit, die abzurufenden Informationen festzulegen
Nachdem Dateien in der ComboBoxlstFilePick angezeigt werden, können Sie den Benutzer mit zusätzlichem Code festlegen lassen, welche Informationen erfasst werden sollen. So möchte ein Benutzer vielleicht nur wissen, an welchem Datum zum letzten Mal auf die Datei zugegriffen wurde. Ein anderer Benutzer interessiert sich eventuell auch für die Dateigröße. Zum Anpassen der Ergebnisse stehen verschiedene Kontrollkästchen (chkLastAccess, chkFileLength) zur Verfügung.
So zeigen Sie ausgewählte Informationen an
Deklarieren Sie am Anfang des btnExamine_Click-Ereignisses nach (lstFilePick.SelectedItem) die folgenden Variablen.
Dim stringlength As String stringLength = "The file's length, in bytes, is: " Dim stringLastAccess As String stringLastAccess = "The file was last accessed on: " Dim LastAccess As Date Dim Length As Long Dim FirstLine As String = "" Dim FinalString As String = "" Dim NewName As String NewName = CType(lstFilePick.SelectedItem, String) If NewName = Nothing Then MsgBox("You must select a file to examine.") Exit Sub End If
Die My.Computer.FileSystem.GetFileInfo-Methode gibt ein FileInfo-Objekt zurück, mit dem Informationen über eine Datei abgerufen werden können.
Fügen Sie am Ende des btnExamine_Click-Ereignisses folgenden Code hinzu.
' Check last access time. If chkLastAccess.Checked = True Then LastAccess = thisFile.LastAccessTime End If
Die LastAccessTime-Eigenschaft ermittelt den Zeitpunkt, an dem das letzte Mal auf die Datei zugegriffen wurde. Der zurückgegebene Date-Wert gibt das Datum und die Uhrzeit der Erstellung oder letzten Änderung der Datei an.
Fügen Sie am Ende des btnExamine_Click-Ereignisses folgenden Code hinzu.
' Check Length. If chkFileLength.Checked = True Then Length = thisFile.Length End If
Die Length-Eigenschaft, die die Länge der Datei ermittelt, gibt einen Long-Wert zurück, der die Dateilänge in Bytes angibt.
Anzeigen der Ergebnisse
Die Funktionalität der Anwendung wird mit einem MsgBox-Feld vervollständigt, in dem die abgerufenen Informationen angezeigt werden.
So zeigen Sie die Ergebnisse an
Fügen Sie am Ende der If-Anweisung, die ermittelt, ob die chkLastAccessCheckBox aktiviert wurde, folgenden Code vor der letzten End If-Anweisung ein:
' Add to the messagebox. FinalString = FinalString & stringLastAccess & LastAccess & "." _ & vbCrLf
Fügen Sie am Ende der If-Anweisung, die ermittelt, ob die chkFileLengthCheckBox aktiviert wurde, folgenden Code vor der letzten End If-Anweisung ein:
' Add to the messagebox. FinalString = FinalString & stringlength & CStr(Length) & "." _ & vbCrLf
Fügen Sie am Ende der If-Anweisung, die ermittelt, ob die chkFirstLineCheckBox aktiviert wurde, folgenden Code vor der letzten End If-Anweisung ein:
' Add to the messagebox. FinalString &= FirstLine & vbCrLf
Speichern der Ergebnisse
Der Benutzer möchte die Ergebnisse der Untersuchung einer Datei vielleicht speichern. Fügen Sie deshalb Code hinzu, der prüft, ob eine Protokolldatei vorhanden ist, eine Protokolldatei erstellt, falls erforderlich, und dann die Ergebnisse in die Protokolldatei schreibt.
So erstellen Sie eine Protokolldatei
Fügen Sie am Ende des btnExamine_Click-Ereignisses folgenden Code hinzu.
' Check to see if results should be saved. If chkSave.Checked = True And FinalString <> "" Then My.Computer.FileSystem.WriteAllText("log.txt", FinalString, True) End If
So testen Sie die Anwendung
Erstellen Sie im gewünschten Verzeichnis eine Textdatei mit dem Namen test.txt mit der folgenden ersten Zeile:
"Dies ist die erste Zeile der ersten Datei. Die Anwendung 'FileExplorer' untersucht nur Textdateien."
Erstellen Sie im gleichen Verzeichnis eine zweite Textdatei mit dem Namen test2.txt mit der folgenden ersten Zeile:
"Dies ist die erste Zeile der zweiten Datei. Die Anwendung 'FileExplorer' untersucht nur Textdateien."
Starten Sie die Anwendung.
Geben Sie einen ungültigen Pfad ein, und klicken Sie auf Submit.
Die folgende Meldung wird angezeigt: "You must enter a valid path. If trying to access a different drive, remember to include the drive letter."
Geben Sie den Pfad zu dem Verzeichnis ein, das die Datei test.txt enthält, und klicken Sie auf Submit.
Die lstFilePickComboBox zeigt die Textdateien an.
Wählen Sie in der lstFilePickComboBox die Datei test.txt aus. Aktivieren Sie alle Kontrollkästchen, und klicken Sie auf Examine.
Auf dem Ergebnisformular wird das letzte Zugriffsdatum und die Dateigröße angegeben.
Wählen Sie in der ComboBoxlstFilePick den Eintrag test2.txt aus, deaktivieren Sie alle Kontrollkästchen, und klicken Sie dann auf Examine.
Die folgende Fehlermeldung wird angezeigt: "No file attribute checkboxes selected."
Aktivieren Sie die Kontrollkästchen Last Access und Save Results, und klicken Sie auf Examine.
Im Ergebnisformular wird nur der Zeitpunkt des letzten Zugriffs angezeigt.
Schließen Sie die Anwendung FileExplorer.
Da Sie das Kontrollkästchen Save Results aktiviert haben, hat die Anwendung FileExplorer die Protokolldatei log.txt in demselben Verzeichnis wie die Textdateien generiert.
So überprüfen Sie die Protokolldatei
- Öffnen Sie im aktuellen Verzeichnis die Datei log.txt, und überprüfen Sie, ob die Anwendung die richtigen Informationen erfasst hat.