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

  1. Klicken Sie im Menü Datei unter Neu auf den Befehl Projekt.

    Das Dialogfeld Neues Projekt wird angezeigt.

  2. Klicken Sie im Bereich Projekttypen auf Visual Basic-Projekte und im Bereich Vorlagen auf Windows-Anwendung.

  3. 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.

  4. Fügen Sie dem Formular die in der folgenden Tabelle genannten Steuerelemente hinzu, und legen Sie deren Eigenschaften wie beschrieben fest.

    Objekt

    Eigenschaften

    Wert

    TextBox

    Name

    Text

    txtDirectory

    Directory

    Button

    Name

    Text

    btnSubmit

    Submit

    Button

    Name

    Text

    btnExamine

    Examine

    ComboBox

    Name

    Text

    lstFilePick

    Select A File

    CheckBox

    Name

    Text

    Checked

    chkFileLength

    File Length

    True

    CheckBox

    Name

    Text

    Checked

    chkLastAccess

    Last Access Time

    True

    CheckBox

    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

  1. Erstellen Sie einen Ereignishandler für Form1_Load, indem Sie auf das Formular doppelklicken.

    Der Code-Editor wird geöffnet.

  2. Fügen Sie folgenden Code hinzu, sodass die txtDirectoryTextBox die aktuelle Position anzeigt.

    txtDirectory.Text = My.Computer.FileSystem.CurrentDirectory
    
  3. 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

  1. Erstellen Sie einen Click-Ereignishandler für btnSubmit, indem Sie auf das Steuerelement im Formular doppelklicken.

    Der Code-Editor wird geöffnet.

  2. 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

  1. 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.

  2. 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
    
  3. 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

  1. Fügen Sie am Anfang des btnSubmit_Click-Ereignisses Folgendes ein.

    Dim fileList As System.Collections.ObjectModel.ReadOnlyCollection(Of String).

  2. 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

  1. 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.

  2. 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.

  1. 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

  1. 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
    
  2. 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
    
  3. 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

  1. 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."

  2. 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."

  3. Starten Sie die Anwendung.

  4. 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."

  5. 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.

  6. 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.

  7. 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."

  8. 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.

  9. 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.

Siehe auch

Referenz

My.Computer.FileSystem.CurrentDirectory-Eigenschaft

My.Computer.FileSystem.GetFileInfo-Methode