Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
1 Einführung
2 Grundlagen
3 Fehlerbehandlung
4 Erweiterte Grundlagen
5 Objektorientierte Programmierung
6 Wichtige Klassen in .NET
7 Weitere Elemente eines Windows-Programms
8 Datenbank-Anwendungen mit ADO.NET
9 Internet-Anwendungen mit ASP.NET
10 Zeichnen mit GDI+
11 Beispielprojekte
A Installation und technische Hinweise
B Lösungen der Übungsaufgaben
Stichwort

Download:
- ZIP, ca. 7,8 MB
Buch bestellen
Ihre Meinung?

Spacer
<< zurück
Einstieg in Visual Basic 2010 von Thomas Theis
Inkl. Visual Studio Express Editions
Buch: Einstieg in Visual Basic 2010

Einstieg in Visual Basic 2010
2., akt. und erw. Aufl., Klappbroschur, mit DVD
467 S., 24,90 Euro
Galileo Computing
ISBN 978-3-8362-1541-1
Pfeil 6 Wichtige Klassen in .NET
Pfeil 6.1 Klasse String für Zeichenketten
Pfeil 6.1.1 Eigenschaften der Klasse String
Pfeil 6.1.2 Trimmen
Pfeil 6.1.3 Splitten
Pfeil 6.1.4 Suchen
Pfeil 6.1.5 Einfügen
Pfeil 6.1.6 Löschen
Pfeil 6.1.7 Teilzeichenkette ermitteln
Pfeil 6.1.8 Zeichen ersetzen
Pfeil 6.1.9 Ausgabe formatieren
Pfeil 6.2 Datum und Uhrzeit
Pfeil 6.2.1 Eigenschaften von DateTime
Pfeil 6.2.2 Rechnen mit Datum und Uhrzeit
Pfeil 6.3 Dateien und Verzeichnisse
Pfeil 6.3.1 Lesen aus einer Textdatei
Pfeil 6.3.2 Schreiben in eine Textdatei
Pfeil 6.3.3 Sicheres Lesen aus einer Textdatei
Pfeil 6.3.4 Sicheres Schreiben in eine Textdatei
Pfeil 6.3.5 Datei mit wahlfreiem Zugriff
Pfeil 6.3.6 Die Klassen File und Directory
Pfeil 6.3.7 Das aktuelle Verzeichnis
Pfeil 6.3.8 Eine Liste der Dateien
Pfeil 6.3.9 Eine Liste der Dateien und Verzeichnisse
Pfeil 6.3.10 Informationen über Dateien und Verzeichnisse
Pfeil 6.3.11 Bewegen in der Verzeichnishierarchie
Pfeil 6.4 Rechnen mit der Klasse Math


Galileo Computing - Zum Seitenanfang

6.3 Dateien und Verzeichnisse Zur nächsten ÜberschriftZur vorigen Überschrift

Zur dauerhaften Speicherung der Arbeitsdaten eines Programms stehen Dateien und Datenbanken zur Verfügung. Sie ermöglichen es, die Programmbenutzung zu beenden und zu einem späteren Zeitpunkt mit dem gleichen Status wieder fortzusetzen.

In diesem Abschnitt wird die einfache Form der Speicherung behandelt: das Schreiben in Textdateien und das Lesen aus Textdateien. Den Datenbanken ist das gesamte Kapitel 8 gewidmet.

System.IO

Es werden Objekte der Klassen FileStream, StreamWriter und StreamReader benötigt. Diese stehen im Namensraum System.IO zur Verfügung. Da dieser Namensraum nicht standardmäßig in Visual Basic-Programme eingebunden wird, müssen Sie ihn für die jeweilige Anwendung importieren.


Galileo Computing - Zum Seitenanfang

6.3.1 Lesen aus einer Textdatei Zur nächsten ÜberschriftZur vorigen Überschrift

FileStream

Ein Objekt der Klasse FileStream wird für die Art des Zugriffs auf die Datei und zum Öffnen der Datei benötigt.

StreamReader

Ein Objekt der Klasse StreamReader dient zum Lesen der Datei-Inhalte. Im folgenden Beispiel (Projekt DateiLesen) werden alle Zeilen einer Textdatei gelesen und auf dem Bildschirm ausgegeben. Abbildung 6.14 zeigt den Inhalt der Textdatei. Das Ergebnis des Programms sehen Sie in Abbildung 6.15.

Abbildung 6.14 Eingabedatei »ein.txt«

Abbildung 6.15 Alle Zeilen gelesen

Imports System.IO
Public Class Form1
    Private Sub cmdLesen_Click(...) Handles ...
        Dim fs As New FileStream(
            "ein.txt", FileMode.Open)
        Dim sr As New StreamReader(fs)
        Dim zeile As String

        Do Until sr.Peek() = –1
            zeile = sr.ReadLine()
            lblA.Text &= zeile & vbCrLf
        Loop
        sr.Close()
    End Sub
End Class

Listing 6.14 Projekt »DateiLesen«

Zur Erläuterung:

  • Mit der Anweisung Imports System.IO wird der entsprechende Namensraum eingebunden und mit all seinen Klassen zur Verfügung gestellt.
  • Das Objekt fs wird als Objekt der Klasse FileStream erzeugt. Bei dem hier verwendeten Konstruktor werden dabei der Name der zu öffnenden Datei und der Öffnungsmodus benötigt.

Pfadangabe

  • Der Name der Datei ein.txt steht in einer Zeichenkette. Wenn kein Pfad angegeben wird, so wird davon ausgegangen, dass die Datei im gleichen Verzeichnis wie die fertige Anwendung steht, hier also in ...\DateiLesen\bin\Debug. Befindet sich die Datei in einem anderen Verzeichnis, so kann der Pfad dorthin relativ (ausgehend vom aktuellen Verzeichnis) oder absolut (mit vollständiger Pfadangabe) angegeben werden.

Ausnahme

  • Wird die Datei, aus der gelesen werden soll, nicht gefunden, so tritt eine Ausnahme auf. Diesen Fall gibt es in der Praxis häufig, beispielsweise aufgrund einer falschen Pfadangabe. Dieser wichtige Aspekt wird im übernächsten Projekt DateiSicherLesen berücksichtigt. Dort finden Sie auch Beispiele für relative und absolute Pfadangaben.

Open, Create, Append

  • Es gibt eine Reihe von möglichen Öffnungsmodi. Sie stehen in der Enumeration FileMode. Die wichtigsten sind Open (zum Öffnen einer Datei, die Sie lesen möchten), Create (zum Öffnen einer Datei, die Sie neu beschreiben bzw. überschreiben möchten) und Append (zum Öffnen einer Datei, an deren Ende Sie weiterschreiben möchten).
  • Das Objekt sr wird als Objekt der Klasse StreamReader erzeugt. Bei dem hier verwendeten Konstruktor wird dabei das Objekt der Klasse FileStream benötigt, aus dem gelesen werden soll.
  • Bei einer Textdatei ist häufig unbekannt, wie viele Zeilen mit Text gefüllt sind. Möchten Sie alle Zeilen lesen, müssen Sie daher eine Do…Loop-Schleife verwenden. Diese muss beendet werden, sobald man an das Ende der Datei gelangt ist.

Peek()

  • Die Methode Peek() der Klasse StreamReader prüft das nächste lesbare Zeichen einer Datei, ohne es einzulesen. Liefert die Methode den Wert –1 zurück, ist das Ende der Datei erreicht.

ReadLine()

  • Die Methode ReadLine() der Klasse StreamReader liest eine Zeile bis zum nächsten Zeilenumbruch und liefert den Inhalt der Zeile (ohne den Zeilenumbruch) als String zurück.

Close()

  • Die Methode Close() der Klasse StreamReader schließt den Eingabestream und die zugehörigen Ressourcen – in diesem Falle auch die Datei, aus der gelesen wurde. Das Schließen der Datei ist äußerst wichtig und darf nicht vergessen werden, da die Datei sonst je nach Ablauf für weitere Zugriffe gesperrt sein könnte.

Galileo Computing - Zum Seitenanfang

6.3.2 Schreiben in eine Textdatei Zur nächsten ÜberschriftZur vorigen Überschrift

Zum Schreiben in eine Datei werden ein Objekt der Klasse StreamWriter und natürlich wieder ein Objekt der Klasse FileStream benötigt. Im folgenden Beispiel (Projekt DateiSchreiben) wird der Inhalt einer mehrzeiligen Textbox (Eigenschaft Multiline = True) vollständig in eine Textdatei geschrieben.

Abbildung 6.16 zeigt das Programm mit der Eingabe. Nach Betätigung des Buttons Schreiben sieht die Ausgabedatei aus wie in Abbildung 6.17.

Abbildung 6.16 Text zum Speichern

Abbildung 6.17 Ausgabedatei »aus.txt«

Imports System.IO
Public Class Form1
    Private Sub cmdSchreiben_Click(...) Handles ...
        Dim fs As New FileStream(
            "aus.txt", FileMode.Create)
        Dim sw As New StreamWriter(fs)
        sw.WriteLine(txtEingabe.Text)
        sw.Close()
    End Sub
End Class

Listing 6.15 Projekt »DateiSchreiben«

Zur Erläuterung:

Create

  • Bei der Erzeugung des Objekts der Klasse FileStream wird der Öffnungsmodus Create benutzt. Mit diesem Modus wird die Datei zum Schreiben geöffnet. Falls sie bereits existiert, wird sie ohne Rückfrage überschrieben.

Ausnahme

  • Kann die Datei, in die geschrieben werden soll, nicht gefunden (falsche Pfadangabe) oder nicht beschrieben werden (Schreibschutz), tritt eine Ausnahme auf. Auch diesen Fall gibt es in der Praxis häufig. Im übernächsten Projekt DateiSicherSchreiben wird dieser wichtige Aspekt berücksichtigt.

WriteLine()

  • Die Methode WriteLine() der Klasse StreamWriter schreibt den übergebenen String in die Datei und fügt einen Zeilenumbruch an. Falls kein zusätzlicher Zeilenumbruch angefügt werden soll, können Sie anstelle der Methode WriteLine() die Methode Write() verwenden.
  • Das Multiline-Textfeld kann bereits einige Zeilenumbrüche beinhalten. Diese werden ebenfalls in der Datei gespeichert, bei WriteLine() und bei Write().

Galileo Computing - Zum Seitenanfang

6.3.3 Sicheres Lesen aus einer Textdatei Zur nächsten ÜberschriftZur vorigen Überschrift

Wie bereits erwähnt, tritt eine Ausnahme auf, wenn die auszulesende Datei nicht gefunden wird, was durchaus vorkommen kann.

Im nachfolgenden Programm (Projekt DateiSicherLesen) werden zwei Lösungen zur Umgehung dieses Problems vorgestellt. Bei der ersten Lösung wird vorab die Existenz der Datei geprüft, bei der zweiten Lösung wird eine Ausnahmebehandlung durchgeführt. Zunächst die erste Lösung (in Abbildung 6.18 zu sehen).

Abbildung 6.18 Ausgabe bei falschem Dateinamen

Der Programmcode:

Imports System.IO
Public Class Form1
    Private Sub cmdExistenz_Click(
            ByVal sender As System.Object,
            ByVal e As System.EventArgs
            ) Handles cmdExistenz.Click
        Dim fs As FileStream
        Dim sr As StreamReader
        Dim dateiname As String = "ein.txt"
        Dim zeile As String

        If Not File.Exists(dateiname) Then
            MessageBox.Show("Datei " &
             dateiname & " existiert nicht")
            Exit Sub
        End If

        fs = New FileStream(dateiname, FileMode.Open)
        sr = New StreamReader(fs)
        Do Until sr.Peek() = –1
            zeile = sr.ReadLine()
            lblA.Text &= zeile & vbCrLf
        Loop
        sr.Close()
    End Sub
End Class

Listing 6.16 Projekt »DateiSicherLesen«, Existenz prüfen

Zur Erläuterung:

  • Es werden zunächst nur zwei Objektverweise auf Objekte der Klasse FileStream und StreamReader erzeugt.
  • Der Dateiname wird in einer String-Variablen gespeichert, da er mehrfach benötigt wird.

File, Exists()

  • Die Klasse File stellt Elemente zur Information über Dateien und zur Bearbeitung von Dateien zur Verfügung. Die statische Methode Exists() prüft, ob eine angegebene Datei existiert. Weitere Möglichkeiten der Klasse File werden im Abschnitt 6.3.6 vorgestellt.
  • In einer Verzweigung wird die Existenz der Eingabedatei ein.txt geprüft. Ist sie nicht vorhanden, wird False zurückgeliefert, eine Fehlermeldung ausgegeben und die Prozedur sofort verlassen.
  • Existiert die Eingabedatei, werden zwei Objekte der Klasse FileStream und StreamReader erzeugt und den beiden bereits vorhandenen Objektverweisen zugewiesen.
  • Anschließend kann die Datei wie gewohnt ausgelesen werden.

Es folgt die zweite Möglichkeit, mit der Ausnahmebehandlung, auch im Projekt DateiSicherLesen:

Imports System.IO
Public Class Form1
[...]
    Private Sub cmdAusnahme_Click(...) Handles ...
        Dim fs As FileStream
        Dim sr As StreamReader
        Dim zeile As String

        Try
            fs = New FileStream(
                "ein.txt", FileMode.Open)
            sr = New StreamReader(fs)
            Do Until sr.Peek() = –1
                zeile = sr.ReadLine()
                lblA.Text &= zeile & vbCrLf
            Loop
            sr.Close()
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub
End Class

Listing 6.17 Projekt »DateiSicherLesen«, Ausnahmebehandlung

Zur Erläuterung:

  • Wie im ersten Fall werden nur zwei Objektverweise erzeugt.

Try…Catch

  • Das restliche Programm steht in einem TryCatch-Block, damit eine eventuell auftretende Ausnahme behandelt werden kann.
  • Sofern die Datei nicht existiert, wird der Catch-Teil durchlaufen und eine Fehlermeldung ausgegeben: »Die Datei ... konnte nicht gefunden werden«.

relative Pfadangabe

Bei einer relativen Pfadangabe bewegt man sich ausgehend vom aktuellen Verzeichnis durch den Verzeichnisbaum. Ein Beispiel: "..\..\Daten\ein.txt" bezeichnet eine Datei, die man erreicht, wenn man vom aktuellen Verzeichnis zwei Ebenen nach oben und anschließend in das Unterverzeichnis Daten geht.


Galileo Computing - Zum Seitenanfang

6.3.4 Sicheres Schreiben in eine Textdatei Zur nächsten ÜberschriftZur vorigen Überschrift

Eine Ausnahme tritt auch auf, falls die Datei, in die geschrieben werden soll, nicht gefunden werden kann (falsche Pfadangabe, siehe Abbildung 6.19) oder nicht beschrieben werden kann (Schreibschutz). Beide Fälle treten in der Praxis häufig auf.

Abbildung 6.19 Falsche Pfadangabe

Im folgenden Programm (Projekt DateiSicherSchreiben) wird dieses Problem mit einer Ausnahmebehandlung umgangen:

Imports System.IO
Class Form1
    Private Sub cmdAusnahme_Click(...) Handles ...
        Dim fs As FileStream
        Dim sw As StreamWriter
        Dim dateiname As String = "C:\Tmp\aus.txt"

        Try
            fs = New FileStream(
                dateiname, FileMode.Create)
            sw = New StreamWriter(fs)
            sw.WriteLine(txtEingabe.Text)
            sw.Close()
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub
End Class

Listing 6.18 Projekt »DateiSicherSchreiben«

Zur Erläuterung:

  • Es wird versucht, in die Datei aus.txt im Verzeichnis C:\Tmp zu schreiben.
  • Gelingt dies aus den oben geschilderten Gründen nicht, erfolgt eine Fehlermeldung.
  • Anderenfalls wird der Inhalt des Textfelds vollständig in die Datei geschrieben.

Galileo Computing - Zum Seitenanfang

6.3.5 Datei mit wahlfreiem Zugriff Zur nächsten ÜberschriftZur vorigen Überschrift

Random Access

Dateien mit wahlfreiem Zugriff (Random Access) bestehen aus einer Folge gleichartiger Datensätze. Ein Datensatz besteht in der Regel aus mehreren Komponenten. Jeder Datensatz kann direkt gelesen oder geschrieben werden. Daher ist der Zugriff schneller als bei den sequentiell gelesenen bzw. geschriebenen Textdateien aus den vorherigen Abschnitten.

Strings fester Länge

Hinweis: Im Unterschied zu älteren Versionen von Visual Basic ist es nicht notwendig, mit Strings oder Datensätzen fester Länge zu arbeiten. Aus Gründen der Kompatibilität zu anderen .NET-Sprachen kann man Strings fester Länge auch nur noch »über Umwege« erzeugen.

Im nachfolgenden Projekt DateiWahlfreierZugriff werden die folgenden Methoden genutzt:

  • FileOpen(): zum Öffnen einer Datei im Modus Wahlfreier Zugriff.
  • FileClose(): zum Schließen einer Datei.
  • FilePutObject(): zum Schreiben eines Datensatzes an die gewünschte Stelle in der Datei.
  • FileGetObject(): zum Lesen eines Datensatzes von der gewünschten Stelle in der Datei.

Als Beispiel werden Datensätze der Klasse Person in die Datei geschrieben bzw. aus ihr gelesen, siehe Abbildung 6.20.

Abbildung 6.20 Programm mit Originalwerten

Jedes Objekt dieser Klasse besitzt die Eigenschaften name, vorname, personalnummer, gehalt und geburtstag. Es folgt die Definition der Klasse in der Datei Person.vb:

Public Class Person
    Dim name As String
    Dim vorname As String
    Dim personalnummer As Integer
    Dim gehalt As Double
    Dim geburtstag As Date

    Sub Create(ByVal na As String,
            ByVal vn As String, ByVal pn As Integer,
            ByVal gh As Double, ByVal gb As Date)
        name = na
        vorname = vn
        personalnummer = pn
        gehalt = gh
        geburtstag = gb
    End Sub

    Sub Create(ByVal s As String)
        Dim teil() As String
        teil = s.Split(";")

        name = teil(0)
        vorname = teil(1)
        personalnummer = teil(2)
        gehalt = teil(3)
        geburtstag = teil(4)
    End Sub

    Function Merge() As String
        Merge = name & ";" & vorname & ";" &
            personalnummer & ";" & gehalt &
            ";" & geburtstag
    End Function

    Overrides Function ToString() As String
        ToString = name & " # " & vorname &
            " # " & personalnummer & " # " &
            gehalt & " # " & geburtstag
    End Function
End Class

Listing 6.19 Projekt »DateiWahlfreierZugriff«, Klasse »Person«

Zur Erläuterung:

  • Die Eigenschaften haben die Datentypen String, Integer, Double und Date.
  • Die erste Methode Create() erwartet fünf Parameter und füllt damit die fünf Eigenschaften des Objekts.
  • Die zweite Methode Create() erwartet eine Zeichenkette als einzigen Parameter, splittet diese anhand eines Trennzeichens in fünf Teile auf und füllt damit die fünf Eigenschaften des Objekts.
  • Die Methode Merge() liefert die fünf Eigenschaften des Objekts für die Ausgabe in die Datei, jeweils getrennt durch ein Trennzeichen.
  • Zu guter Letzt wird die Ausgabemethode ToString() aus der Basisklasse Object überschrieben. Sie liefert die fünf Eigenschaften des Objekts für die Ausgabe auf dem Bildschirm, jeweils getrennt durch mehrere Trennzeichen.

Es folgt der Beginn der Anwendungsklasse:

Imports System.IO
Public Class Form1
    Private Sub Form1_Load(...) Handles MyBase.Load
        AlleLesen()
    End Sub

    Private Sub cmdAlleLesen_Click(...) Handles ...
        AlleLesen()
    End Sub

    Private Sub AlleLesen()
        Dim p As New Person()
        Dim s As String
        Dim nr As Integer

        lstA.Items.Clear()
        If File.Exists("data.txt") Then
            FileOpen(1, "data.txt", OpenMode.Random)
            nr = 1
            Do
                Try
                    FileGetObject(1, s)
                    p.Create(s)
                    lstA.Items.Add(nr & ": " &
                        p.ToString())
                    nr = nr + 1
                Catch ex As Exception
                    Exit Do
                End Try
            Loop
            FileClose(1)

            numLesen.Minimum = 1
            numLesen.Maximum = nr – 1
            numLesen.Value = 1

            numSchreiben.Minimum = 1
            numSchreiben.Maximum = nr
            numSchreiben.Value = nr
        Else
            lstA.Items.Add("Datei nicht vorhanden")
        End If
    End Sub
[...]
End Class

Listing 6.20 Projekt »DateiWahlfreierZugriff«, Beginn

Zur Erläuterung:

  • Beim Start der Anwendung bzw. nach Betätigung des Buttons Alle lesen werden alle Datensätze aus der Datei gelesen und in der Listbox dargestellt. Zu diesem Zweck wird die Prozedur AlleLesen() aufgerufen.
  • In dieser Prozedur wird ein zunächst leeres Objekt der Klasse Person erzeugt.

FileOpen()

  • Falls die Datei mit den Personendaten existiert, dann wird sie mithilfe der Methode FileOpen() geöffnet. Diese erwartet hier drei Parameter:
    • Eine frei wählbare Dateinummer, unter der die geöffnete Datei im weiteren Verlauf angesprochen werden kann.
    • Den Namen der Datei, hier im Anwendungsverzeichnis liegend.
    • Random

    • Den Öffnungsmodus, hier Random für den wahlfreien Zugriff.

FileGetObject()

  • Innerhalb einer Schleife werden die einzelnen Datensätze mithilfe der Methode FileGetObject() aus der Datei gelesen. Diese Schleife wird verlassen, falls der Lesevorgang nicht erfolgreich war. Die Methode erwartet hier zwei Parameter:
    • Die zuvor festgelegte Dateinummer.
    • Ein Objekt eines elementaren Datentyps, hier ist dies das Objekt s des Datentyps String. Es können keine Objekte eigener Klassen oder benutzerdefinierter Datentypen genutzt werden.
  • Nach dem Einlesen eines Datensatzes wird dieser mithilfe der Methode Create() zerlegt und mithilfe der Methode ToString() in die Listbox geschrieben.
  • Nach dem Einlesen aller Datensätze wird die Datei mit FileClose() geschlossen.
  • Die beiden Zahlenauswahlfelder zum direkten Lesen bzw. Schreiben von Datensätzen aus der Datei bzw. in die Datei werden auf passende Werte eingestellt:

    • Das Maximum für das Zahlenauswahlfeld zum Lesen wird auf die aktuelle Anzahl Datensätze gestellt.
    • Das Maximum für das Zahlenauswahlfeld zum Schreiben wird auf die aktuelle Anzahl Datensätze + 1 gestellt. Es kann also ein neuer Datensatz direkt ans Ende der Datei geschrieben werden. Es können aber auch Datensätze mitten in der Datei überschrieben werden.

Es folgen die Prozeduren zum direkten Lesen bzw. Schreiben von einzelnen Datensätzen:

Imports System.IO
Public Class Form1
[...]
    Private Sub cmdLesen_Click(...) Handles ...
        Dim p As New Person()
        Dim s As String
        lstA.Items.Clear()

        FileOpen(1, "data.txt", OpenMode.Random)
        FileGetObject(1, s, numLesen.Value)
        p.Create(s)
        lstA.Items.Add(p.ToString())
        FileClose(1)
    End Sub

    Private Sub cmdSchreiben_Click(...) Handles ...
        Dim p As New Person
        Dim na, vn As String
        Dim pn As Integer
        Dim gh As Integer
        Dim gb As Date

        If txtName.Text <> "" Then na =
            txtName.Text Else na = "-"
        If txtVorname.Text <> "" Then vn =
            txtVorname.Text Else vn = "-"
        If IsNumeric(txtPersonalnummer.Text) Then pn =
            txtPersonalnummer.Text Else pn = 0
        If IsNumeric(txtGehalt.Text) Then gh =
            txtGehalt.Text Else gh = 0
        If IsDate(txtGeburtstag.Text) Then gb =
            txtGeburtstag.Text Else gb = "01.01.1900"
        p.Create(na, vn, pn, gh, gb)

        FileOpen(1, "data.txt", OpenMode.Random)
        FilePutObject(1, p.Merge(),
            numSchreiben.Value)
        FileClose(1)

        AlleLesen()
    End Sub
[...]
End Class

Listing 6.21 Projekt »DateiWahlfreierZugriff«, einzelne Datensätze

Zur Erläuterung:

  • Beim direkten Lesen eines einzelnen Datensatzes aus der Datei wird ebenfalls die Methode FileGetObject()genutzt, hier aber mit einem dritten Parameter: der Nummer des gewünschten Datensatzes. Diese Nummer wird dem Zahlenauswahlfeld entnommen, siehe Abbildung 6.21.

Abbildung 6.21 Lesen des Datensatzes 2

FilePutObject()

  • Auch beim direkten Schreiben eines einzelnen Datensatzes in die Datei mithilfe der Methode FilePutObject() wird auf das zugehörige Zahlenauswahlfeld zugegriffen, um die gewünschte Nummer zu ermitteln.

Werte prüfen

  • Zuvor wurde u. a. mithilfe der Methoden IsNumeric() und IsDate() festgestellt, ob der Benutzer gültige Werte in die Textfelder eingetragen hatte. Notfalls wird auf Standardwerte korrigiert, damit sich in jedem Fall ein gültiger Datensatz ergibt.
  • Nach dem Schreiben eines Datensatzes werden wiederum alle Datensätze zur Aktualisierung der Benutzeroberfläche gelesen.

Als Letztes folgt die Prozedur zum Wiederherstellen der Originalwerte:

Imports System.IO
Public Class Form1
[...]
    Private Sub cmdOriginalwerte_Click(...) Handles ...
        Dim p As New Person
        If File.Exists("data.txt") Then Kill("data.txt")
        FileOpen(1, "data.txt", OpenMode.Random)

        p.Create("Maier", "Hans", 6714, 3500,
            "15.03.1962")
        FilePutObject(1, p.Merge())
        p.Create("Schmitz", "Peter", 81343, 3750,
            "12.04.1958")
        FilePutObject(1, p.Merge())
        p.Create("Mertens", "Julia", 2297, 3621.5,
            "30.12.1959")
        FilePutObject(1, p.Merge())

        FileClose(1)
        AlleLesen()
    End Sub
End Class

Listing 6.22 Projekt »DateiWahlfreierZugriff«, Originalwerte

Zur Erläuterung:

  • Hier wird die Methode FilePutObject() nur mit zwei Parametern aufgerufen, da die Datensätze einfach der Reihe nach in die Datei geschrieben werden.
  • Die Methode File.Exists() stellt fest, ob eine Datei existiert. Mithilfe der Methode Kill() wird eine Datei ohne Rückfrage (!) gelöscht, siehe auch nächster Abschnitt.

Galileo Computing - Zum Seitenanfang

6.3.6 Die Klassen File und Directory Zur nächsten ÜberschriftZur vorigen Überschrift

Die beiden Klassen File und Directory, ebenfalls aus dem Namensraum System.IO, bieten zahlreiche Möglichkeiten zur Information über Dateien und Verzeichnisse.

Im nachfolgenden Projekt DateiVerzeichnisListe, das sich über einige Abschnitte erstreckt, werden einige nützliche, statische Methoden dieser beiden Klassen eingesetzt:

  • Directory.Exists(): Prüft die Existenz eines Verzeichnisses.
  • Directory.SetCurrentDirectory(): Setzt das Verzeichnis, in dem die Windows-Anwendung arbeitet, neu.
  • Directory.GetCurrentDirectory(): Ermittelt das Verzeichnis, in dem die Windows-Anwendung arbeitet.
  • Directory.GetFiles(): Ermittelt eine Liste der Dateien in einem Verzeichnis.
  • Directory.FileSystemEntries(): Ermittelt eine Liste der Dateien und Unterverzeichnisse in einem Verzeichnis.
  • File.GetAttributes(): Ermittelt Attribute einer Datei oder eines Verzeichnisses (versteckt, Archiv usw.)
  • File.GetCreationTime(): Ermittelt Datum und Uhrzeit der Erzeugung einer Datei oder eines Verzeichnisses.
  • File.GetLastAccessTime(): Ermittelt das Datum des letzten Zugriffs auf eine Datei oder ein Verzeichnis.
  • File.GetLastWriteTime(): Ermittelt Datum und Uhrzeit des letzten schreibenden Zugriffs auf eine Datei oder auf ein Verzeichnis.

Es wurde hier bewusst auf den Einsatz von Methoden verzichtet, die Dateien und Verzeichnisse verändern, wie z. B. File.Delete(), File. Move(), File.Replace(), Directory.Delete() oder Directory.Move(). Allzu leicht kann der Benutzer mit diesen Methoden unbeabsichtigt Dateien und Verzeichnisse dauerhaft verändern; sie sollten daher mit großer Vorsicht eingesetzt werden.


Galileo Computing - Zum Seitenanfang

6.3.7 Das aktuelle Verzeichnis Zur nächsten ÜberschriftZur vorigen Überschrift

Zu Beginn des Programms wird das Startverzeichnis (C:\Temp) eingestellt und angezeigt (siehe Abbildung 6.22).

Abbildung 6.22 Startverzeichnis

Der zugehörige Code:

Imports System.IO
Public Class Form1
    Private Sub Form1_Load(...) Handles MyBase.Load
        If Directory.Exists("C:\Temp") Then
            Directory.SetCurrentDirectory("C:\Temp")
        Else
            MessageBox.Show("Das Verzeichnis" &
                " C:\Temp existiert nicht")
        End If
        lblCurDir.Text =
            Directory.GetCurrentDirectory()
    End Sub
[...]
End Class

Listing 6.23 Projekt »DateiVerzeichnisListe«, Start

Zur Erläuterung:

SetCurrentDirectory()

  • Die Methode Directory.SetCurrentDirectory() setzt das aktuell benutzte Verzeichnis.

Exists()

  • Vorher wird mit der Methode Directory.Exists() geprüft, ob das betreffende Verzeichnis existiert. Beide Methoden erwarten als Parameter eine Zeichenkette.

GetCurrentDirectory()

  • Die Methode Directory.GetCurrentDirectory() liefert den Namen des aktuellen Verzeichnisses.

Galileo Computing - Zum Seitenanfang

6.3.8 Eine Liste der Dateien Zur nächsten ÜberschriftZur vorigen Überschrift

Abbildung 6.23 zeigt die Ausgabe nach Betätigung des Buttons Dateiliste.

Abbildung 6.23 Dateiliste des Verzeichnisses C:\Temp

Der zugehörige Code:

Imports System.IO
Public Class Form1
[...]
    Private Sub cmdDateiliste_Click(...) Handles ...
        Dim verzeichnis As String
        Dim dateiliste() As String
        Dim i As Integer

        verzeichnis = Directory.GetCurrentDirectory()
        dateiliste = Directory.GetFiles(verzeichnis)
        lstA.Items.Clear()
        For i = 0 To dateiliste.Count – 1
            lstA.Items.Add(dateiliste(i))
        Next
    End Sub
[...]
End Class

Listing 6.24 Projekt »DateiVerzeichnisListe«, Dateiliste

Zur Erläuterung:

  • Die Variable verzeichnis wird mithilfe der Methode Directory.GetCurrentDirectory() auf das aktuelle Arbeitsverzeichnis gesetzt. Zu Beginn ist dies C:\Temp.

GetFiles()

  • Die Methode Directory.GetFiles() liefert ein Feld von Strings. Die Variable dateiliste wurde als ein solches Feld (unbekannter Größe) deklariert und erhält den Rückgabewert der Methode zugewiesen.
  • Mithilfe einer For-Schleife und der Feld-Eigenschaft Count wird das Listenfeld mit den Dateinamen gefüllt.

Galileo Computing - Zum Seitenanfang

6.3.9 Eine Liste der Dateien und Verzeichnisse Zur nächsten ÜberschriftZur vorigen Überschrift

In Abbildung 6.24 erscheinen zusätzlich die Unterverzeichnisse.

Abbildung 6.24 Verzeichnis C:\Temp, Dateien und Verzeichnisse

Der nächste Teil des Programms lautet wie folgt:

Imports System.IO
Public Class Form1
[...]
    Private Sub cmdSystemeinträge_Click(...
            ) Handles ...
        Systemeinträge()
    End Sub

    Private Sub Systemeinträge()
        Dim verzeichnis As String
        Dim dateiliste() As String
        Dim i As Integer

        verzeichnis = Directory.GetCurrentDirectory()
        dateiliste = Directory.
            GetFileSystemEntries(verzeichnis)
        lstA.Items.Clear()
        For i = 0 To dateiliste.Count – 1
            lstA.Items.Add(dateiliste(i))
        Next
    End Sub
[...]
End Class

Listing 6.25 Projekt »DateiVerzeichnisListe«, Systemeinträge

Zur Erläuterung:

  • Die eigentliche Ausgabe wird in der allgemeinen Prozedur Systemeinträge() vorgenommen. Diese wird später noch von anderen Programmteilen genutzt.

GetFileSystemEntries()

  • Die Methode Directory.GetFileSystemEntries() ist der Methode Directory.GetFiles() sehr ähnlich. Allerdings liefert sie nicht nur die Namen der Dateien, sondern auch die Namen der Verzeichnisse.

Galileo Computing - Zum Seitenanfang

6.3.10 Informationen über Dateien und Verzeichnisse Zur nächsten ÜberschriftZur vorigen Überschrift

Im Folgenden werden einzelne Dateien bzw. Verzeichnisse genauer betrachtet, siehe Abbildung 6.25.

Abbildung 6.25 Information über die ausgewählte Datei

Der Programmcode:

Imports System.IO
Public Class Form1
[...]
    Private Sub lstA_SelectedIndexChanged(...
            ) Handles lstA.SelectedIndexChanged
        Dim name As String
        If lstA.SelectedIndex <> –1 Then
            name = lstA.Text

            If File.GetAttributes(name) =
                    FileAttributes.Directory Then
                lblAnzeige.Text = "Verzeichnis "
            Else
                lblAnzeige.Text = "Datei "
            End If

            lblAnzeige.Text &= name & vbCrLf &
                "Erzeugt: " &
                File.GetCreationTime(name) & vbCrLf &
                "Letzter Zugriff: " &
                File.GetLastAccessTime(name) &
                vbCrLf & "Letzter Schreibzugriff:" &
                File.GetLastWriteTime(name)
        Else
            MessageBox.Show("Kein Eintrag ausgewählt")
        End If
    End Sub
[...]
End Class

Listing 6.26 Projekt »DateiVerzeichnisListe«, Informationen

Zur Erläuterung:

  • Hat der Benutzer in der Liste der Dateien (und ggf. Verzeichnisse) einen Eintrag ausgewählt, so werden einige Informationen zu den letzten Zugriffen angezeigt.

GetAttributes()

  • Die Methode GetAttributes() der Klasse File liefert Informationen über die Attribute einer Datei bzw. eines Verzeichnisses, wie z. B. versteckt, schreibgeschützt, Archiv, Datei oder Verzeichnis. Diese Informationen können Sie mit Elementen der Enumeration FileAttributes vergleichen.

Get...Time()

  • Die Methoden File.GetCreationTime(), File.GetLastAccessTime() und File.GetLastWriteTime() ermitteln die Daten der Erzeugung der Datei, des letzten Zugriffs auf die Datei und des letzten schreibenden Zugriffs auf die Datei.

Galileo Computing - Zum Seitenanfang

6.3.11 Bewegen in der Verzeichnishierarchie topZur vorigen Überschrift

Wählen Sie zunächst ein Unterverzeichnis aus, siehe Abbildung 6.26.

Abbildung 6.26 Auswahl

Wechseln Sie anschließend mit dem Button in Verzeichnis in das betreffende Unterverzeichnis oder mit dem Button nach oben in das übergeordnete Verzeichnis, siehe Abbildung 6.27.

Abbildung 6.27 Unterverzeichnis C:\Temp\Haus

Der letzte Teil des Programms lautet:

Imports System.IO
Public Class Form1
 [...]
    Private Sub cmdInVerzeichnis_Click(...
            ) Handles ...
        If lstA.SelectedIndex <> –1 Then
            If File.GetAttributes(lstA.Text) =
                    FileAttributes.Directory Then
                Directory.
                    SetCurrentDirectory(lstA.Text)
            Else
                MessageBox.Show(lstA.Text &
                       " ist kein Verzeichnis")
            End If
        Else
            MessageBox.Show("Kein Eintrag ausgewählt")
        End If

        lblCurDir.Text =
            Directory.GetCurrentDirectory()
        Systemeinträge()
    End Sub

    Private Sub cmdNachOben_Click(...) Handles ...
        Directory.SetCurrentDirectory("..")
        lblCurDir.Text =
            Directory.GetCurrentDirectory()
        Systemeinträge()
    End Sub
End Class

Listing 6.27 Projekt »DateiVerzeichnisListe«, Verzeichniswechsel

Zur Erläuterung:

  • Falls der Benutzer in der Liste der Dateien und Verzeichnisse ein Verzeichnis ausgewählt hat und den Button in Verzeichnis betätigt, wird das aktuelle Arbeitsverzeichnis mit Directory.SetCurrentDirectory() gewechselt. Das aktuelle Verzeichnis wird angezeigt.
  • Falls bei der Methode Directory.SetCurrentDirectory() als Verzeichnis .. eingetragen wird, findet ein Wechsel in das übergeordnete Verzeichnis statt.
  • Nach einem Verzeichniswechsel wird die aktuelle Liste der Dateien und Verzeichnisse angezeigt.
  • Auf diese Art und Weise kann man sich in der gesamten Verzeichnis-Hierarchie bewegen und sich die Inhalte der Verzeichnisse anzeigen lassen.


Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.






<< zurück
  Zum Katalog
Zum Katalog: Einstieg in Visual Basic 2010

Einstieg in Visual Basic 2010
Jetzt bestellen


 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchempfehlungen
Zum Katalog: Visual Basic 2010






 Visual Basic 2010


Zum Katalog: Windows Presentation Foundation






 Windows Presentation
 Foundation


Zum Katalog: Silverlight 4






 Silverlight 4


Zum Katalog: Einstieg in Visual C# 2010






 Einstieg in
 Visual C# 2010


Zum Katalog: Visual C# 2010






 Visual C# 2010


Zum Katalog: Einstieg in PHP 5.3 und MySQL 5.4






 Einstieg in PHP 5.3
 und MySQL 5.4


Zum Katalog: PHP 5.3 und MySQL 5.4






 PHP 5.3 und
 MySQL 5.4


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo




Copyright © Galileo Press 2010
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de