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

Inhaltsverzeichnis
1 Einführung
2 Grundlagen der Sprachsyntax
3 Klassendesign
4 Weitere Datentypen
5 Multithreading
6 Collections und LINQ
7 Eingabe und Ausgabe
8 Anwendungen: Struktur und Installation
9 Code erstellen und debuggen
10 Einige Basisklassen
11 Windows-Anwendungen erstellen
12 Die wichtigsten Steuerelemente
13 Tastatur- und Mausereignisse
14 MDI-Anwendungen
15 Grafiken mit GDI+
16 Drucken
17 Entwickeln von Steuerelementen
18 Programmiertechniken
19 WPF – Grundlagen
20 Layoutcontainer
21 WPF-Steuerelemente
22 Konzepte von WPF
23 Datenbankverbindung mit ADO.NET
24 Datenbankabfragen mit ADO.NET
25 DataAdapter
26 Offline mit DataSet
27 Datenbanken aktualisieren
28 Stark typisierte DataSets
A Anhang: Einige Übersichten
Stichwort

Jetzt Buch bestellen
Ihre Meinung?

Spacer
<< zurück
Visual Basic 2008 von Andreas Kuehnel, Stephan Leibbrandt
Das umfassende Handbuch
Buch: Visual Basic 2008

Visual Basic 2008
3., aktualisierte und erweiterte Auflage, geb., mit DVD
1.323 S., 49,90 Euro
Rheinwerk Computing
ISBN 978-3-8362-1171-0
Pfeil 7 Eingabe und Ausgabe
Pfeil 7.1 Namensräume der Ein- bzw. Ausgabe
Pfeil 7.2 Ausnahmebehandlung
Pfeil 7.3 Dateien und Verzeichnisse
Pfeil 7.3.1 Dateizugriff mit File
Pfeil 7.3.2 Dateizugriff mit FileInfo
Pfeil 7.3.3 Die Klassen Directory und DirectoryInfo
Pfeil 7.3.4 Dateizugriffe in Aktion
Pfeil 7.3.5 Pfade mit Path
Pfeil 7.3.6 Laufwerksinformation mit DriveInfo
Pfeil 7.3.7 SpecialDirectories
Pfeil 7.4 Datenflüsse in Streams
Pfeil 7.4.1 Die abstrakte Klasse Stream
Pfeil 7.4.2 Stream-Klassen im Überblick
Pfeil 7.4.3 Dateizugriff mit FileStream
Pfeil 7.5 Texte mit TextReader und TextWriter
Pfeil 7.5.1 Texte mit StreamWriter schreiben
Pfeil 7.5.2 Texte mit StreamReader lesen
Pfeil 7.5.3 Zeichenketten mit StringWriter und StringReader
Pfeil 7.6 Binärdaten mit BinaryReader und BinaryWriter
Pfeil 7.6.1 Schreiben mit BinaryWriter
Pfeil 7.6.2 Lesen mit BinaryReader
Pfeil 7.6.3 Binäre Datenströme auswerten
Pfeil 7.6.4 Komplexe binäre Daten
Pfeil 7.7 Serialisierung
Pfeil 7.7.1 Serialisierungsverfahren
Pfeil 7.7.2 Testklassen
Pfeil 7.7.3 Serialisierung mit BinaryFormatter
Pfeil 7.7.4 Serialisierung mit SoapFormatter
Pfeil 7.7.5 Serialisierung mit XmlSerializer


Rheinwerk Computing - Zum Seitenanfang

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

Die Klassenbibliothek des .NET Frameworks unterstützt den Entwickler mit den in Tabelle 7.1 aufgelisteten Klassen, die Laufwerke, Verzeichnisse und Dateien beschreiben.


Tabelle 7.1 Klassen zur Beschreibung des Dateisystems

Klasse Beschreibung

File

Klassengebundene Methoden zum Zugriff auf eine Datei als Ganzes

FileInfo

Instanzmethoden zum Zugriff auf eine Datei als Ganzes

Directory

Klassengebundene Methoden zum Zugriff auf ein Verzeichnis

DirectoryInfo

Instanzmethoden zum Zugriff auf ein Verzeichnis

Path

Klassengebundene Methoden für Pfadangaben

DriveInfo

Instanzmethoden für Laufwerksinformationen

SpecialDirectories

Pfade Windows-eigener Verzeichnisse



Rheinwerk Computing - Zum Seitenanfang

7.3.1 Dateizugriff mit File Zur nächsten ÜberschriftZur vorigen Überschrift

Die nicht ableitbare Klasse File stellt nur statische Methoden zur Verfügung. Die Methoden von FileInfo sind Instanzmethoden und werden über eine Objektreferenz aufgerufen. Funktionell sind sich beide Klassen recht ähnlich.

Mit den Klassenmethoden von File lässt sich eine Datei erstellen, kopieren, löschen usw. Sie können auch die Attribute einer Datei lesen oder setzen, und – was auch sehr wichtig ist – Sie können eine Datei öffnen. In Tabelle 7.2, »Methoden in File«, sind die wichtigsten Methoden samt Rückgabetyp aufgeführt.


Tabelle 7.2 Methoden in File

Methode Rückgabetyp Beschreibung

AppendAllText

-

Fügt eine Zeichenfolge an und schließt die Datei.

AppendText

StreamWriter

Hängt Text an eine existierende Datei an.

Copy

-

Kopiert eine bestehende Datei.

Create

FileStream

Erzeugt eine Datei in einem angegebenen Pfad.

CreateText

StreamWriter

Erstellt oder öffnet eine Textdatei.

Delete

-

Löscht eine Datei.

Exists

Boolean

Gibt an, ob die angegebene Datei existiert.

GetAttributes

FileAttributes

Bitfeld der Dateiattribute

GetCreationTime

DateTime

Erstellungsdatum und die Uhrzeit einer Datei

GetLastAccessTime

DateTime

Datum und Uhrzeit des letzten Zugriffs

GetLastWriteTime

DateTime

Datum und Uhrzeit des letzten Schreibzugriffs

Move

-

Verschiebt eine Datei in einen anderen Ordner oder benennt sie um.

Open

FileStream

Öffnet eine Datei.

OpenRead

FileStream

Öffnet eine Datei zum Lesen.

OpenText

StreamReader

Öffnet eine Textdatei zum Lesen.

OpenWrite

FileStream

Öffnet eine Datei zum Schreiben.

ReadAllBytes

Byte()

Liest binär in ein Byte-Array und schließt die Datei.

ReadAllLines

String()

Liest jede Zeile in ein String und schließt die Datei.

ReadAllText

String

Liest eine Textdatei und schließt sie.

SetAttributes

Setzt Dateiattribute.

SetCreationTime

Setzt Erstellungsdatum und -uhrzeit.

SetLastAccessTime

Setzt Datum und Uhrzeit des letzten Zugriffs.

SetLastWriteTime

Setzt Datum und Uhrzeit des letzten Schreibzugriffs.

WriteAllBytes

Schreibt ein gegebenes Byte-Array in eine neue Datei.

WriteAllLines

Schreibt ein gegebenes String-Array in neue Datei.

WriteAllText

Schreibt einen gegebenen Text in eine neue Datei.


Alle Methoden, die eine Datei nach der Operation offen lassen, geben ein Stream-Objekt zurück. Mit ihm haben Sie Zugriff auf den Inhalt der Datei. Ein FileStream beschreibt dabei einfache Bytesequenzen, ein StreamReader basiert auf einer Textdatei.

Einige typische Dateioperationen wollen wir uns nun näher ansehen.

Kopieren einer Datei

Zum Kopieren einer Datei dient die Methode Copy, die einfach überladen ist:


Public Shared Sub Copy(sourceFileName As String, destFileName As String) 
Public Shared Sub Copy(sourceFileName As String, destFileName As String, _ 
                       overwrite As Boolean)

Das erste Argument ist der Dateiname der zu kopierenden Datei. Befindet sie sich in keinem bekannten Suchpfad, muss der gesamte Zugriffspfad beschrieben werden. Im zweiten Argument geben Sie das Zielverzeichnis und den Namen der Dateikopie an. Die Betriebssysteme der Quelle und des Ziels bestimmen jeweils, welche Namen erlaubt sind. Befindet sich im Zielverzeichnis bereits eine gleichnamige Datei, bestimmt der dritte Parameter das Verhalten. Fehlt er oder ist er False, wird die Ausnahme DirectoryNotFoundException ausgelöst. Beim Wert True wird kommentarlos überschrieben. Ein Beispiel:

File.Copy("C:\Test1.txt", "D:\Test2.txt")

Wenn Sie die Pfadangabe in einem String-Literal festlegen, müssen Sie beachten, dass jedes Anführungszeichen im Pfad gedoppelt werden muss, damit die Zeichenkette nicht vorzeitig beendet wird.

Im folgenden Beispiel wird der Anwender dazu aufgefordert, den Pfad und das Zielverzeichnis der zu kopierenden Datei einzugeben. Dabei kann es zu verschiedenen Ausnahmen kommen, beispielsweise wenn die zu kopierende Datei nicht gefunden wird oder der Anwender das Quell- oder Zielverzeichnis an der Konsole nicht angibt. Diese Fehler werden im Code aufgefangen und behandelt. Unspezifische oder vergessene Fehler von IO-Operationen fängt der letzte Catch-Zweig ab.


'...\IO\Dateien\Kopieren.vb

Option Strict On 
Imports System.IO 
Namespace EA 
  Module Kopieren 
    Sub Test() 
      Dim source, destination As String 
      Console.Write("Datei zum Kopieren: ") : source = Console.ReadLine() 
      Console.Write("Kopierziel: ") : destination = Console.ReadLine() 
      Try 
        File.Copy(source, destination) 
        Console.WriteLine("Erfolgreich kopiert.") 
      Catch e As DirectoryNotFoundException 
        Console.WriteLine(e.Message) ' Zielverzeichnis nicht gefunden 
      Catch e As FileNotFoundException 
        Console.WriteLine(e.Message) ' zu kopierende Datei nicht gefunden 
      Catch  e As ArgumentException 
        Console.WriteLine(e.Message) ' Ziel- oder Quellverzeichnis fehlt 
      Catch e As IOException 
        Console.WriteLine(e.Message) ' unbehandelte Ausnahme 
      End Try 
      Console.ReadLine() 
    End Sub 
  End Module 
End Namespace

Als Pfad ist neben der absoluten Angabe, die auch Suchpfade einschließt, eine relative Angabe zulässig. Relative Pfadangaben beziehen sich dabei auf das aktuelle Arbeitsverzeichnis. Beim Programmstart ist das das Verzeichnis, in dem sich die ausführbare Datei der Anwendung befindet. Normalerweise werden Sie als Entwickler nicht wissen, in welchem Pfad der Anwender das Programm installiert hat. Sie können ihn mit

Directory.GetCurrentDirectory()

ermitteln. Anschließend wird noch der Dateiname angehängt. Da GetCurrentDirectory nicht mit einem Backslash (\) abschließt, verbinden wir die Zeichenketten nicht direkt mit &.

Dim source As String = _ 
  Path.Combine(Directory.GetCurrentDirectory(), "MyDoc.txt") 
Dim destination As String = "C:\DuplicatedDoc.txt" 
File.Copy(source, destination)

Löschen einer Datei

Die Syntax der Methode Delete zum Löschen einer Datei lautet:


Public Shared Sub Delete(path As String)

Der Parameter path erwartet entweder eine absolute oder relative Pfadangabe. Ungültige Angaben können auch hier unterschiedliche Ausnahmen auslösen.

File.Delete("C:\MyDoc.txt")

Verschieben einer Datei

Die Syntax der Methode Move zum Verschieben einer Datei ähnelt der der Methode Copy:


Public Shared Sub Move(sourceFileName As String, destFileName As String)

Dem ersten Parameter wird die zu verschiebende Datei übergeben, dem zweiten der neue Pfad der Datei. Mit Move lassen sich Dateien nicht nur aus einem Quell- in ein Zielverzeichnis verschieben, sondern auch umbenennen.

File.Move("C:\MyDoc.txt", "C:\Test.Doc")

Prüfen, ob eine Datei existiert

Bevor Sie eine Datei öffnen, sollten Sie prüfen, ob sie überhaupt existiert. Die Klasse File hat dazu die Methode Exists, die False zurückliefert, wenn die Datei nicht gefunden wird.

Dim strFile As String = "C:\MyFile.txt" 
If File.Exists(strFile) Then ...

Eine ähnliche Codesequenz ist in jedem Programm sinnvoll, in dem eine Operation die Existenz einer Datei voraussetzt. Das erspart die Codierung einer Ausnahmebehandlung.

Öffnen einer Datei

Bevor Sie den Inhalt einer Datei lesen bzw. ändern können, muss diese geöffnet werden. Eine Datei zu öffnen sagt aber noch nichts darüber aus, was ein Benutzer mit dieser Datei anfangen darf – ob er sie nur lesen kann oder auch ändern darf. Auch die Berechtigung gleichzeitiger Zugriffe ist nicht selbstverständlich.

Vier Methoden der Klasse File öffnen eine Datei: OpenRead, OpenText, OpenWrite sowie die überladene Methode Open. In ihr sind die beiden letzten Parameter optional.


Public Shared Function Open(path As String, mode As FileMode, _ 
  access As FileAccess, share As FileShare) As FileStream

Dem Parameter path wird beim Aufruf die Pfadangabe als Zeichenfolge übergeben. Sie besteht aus dem Pfad und dem Dateinamen.

Das Öffnen einer Datei erledigt das Betriebssystem, das wissen muss, wie es die Datei öffnen soll. Der mode-Parameter vom Typ der Enumeration FileMode steuert dieses Verhalten (siehe Tabelle 7.3).


Tabelle 7.3 Die Enumeration »FileMode«

Konstante Beschreibung

Append

Öffnet eine bestehende Datei und setzt den Dateizeiger an das Dateiende. Existiert die Datei noch nicht, wird sie erzeugt.

Create

Erzeugt eine neue Datei bzw. überschreibt eine existierende.

CreateNew

Erzeugt immer eine neue Datei. Existiert sie, tritt eine IOException auf.

Open

Öffnet eine bestehende Datei. Existiert sie nicht, tritt eine FileNotFound-Exception auf.

OpenOrCreate

Öffnet eine bestehende Datei. Existiert sie nicht, wird eine neue erzeugt.

Truncate

Öffnet eine Datei und löscht deren Inhalt.


Mit dem Parameter access wird festgelegt, ob die Datei gelesen oder/und geschrieben werden darf. Der Parameter ist vom Typ der Enumeration FileAccess (siehe Tabelle 7.4).


Tabelle 7.4 Die Enumeration »FileAccess«

Konstante Beschreibung

Read

Die Datei wird für den Lesezugriff geöffnet.

Write

Die Datei wird für den Schreibzugriff geöffnet.

ReadWrite

Die Datei wird für den Lese- und Schreibzugriff geöffnet.


Eine Datei, die mit FileAccess.Read geöffnet wird, ist schreibgeschützt. Eine lesegeschützte Datei, deren Inhalt verändert werden soll, wird mit FileAccess.Write geöffnet. Die Konstante FileAccess.ReadWrite erlaubt sowohl einen lesenden als auch einen schreibenden Zugriff.

Versuchen Sie, auf eine mit FileAccess.Write geöffnete Datei lesend zuzugreifen, wird die Ausnahme NotSupportedException ausgelöst. Die Namensgebung ist unglücklich. Die Ausnahme bemängelt eine Operation, die aufgrund des Öffnungsmodus nicht unterstützt wird (besser wäre der Name NotSupportedFileAccessException).

Kommen wir nun zum letzten Parameter der Open-Methode – share. Er regelt den Fall, dass mehrere Anwendungen oder Threads gleichzeitig auf dieselbe Datei zugreifen (netzwerklose, nicht multitasking-fähige Rechner scheinen mir anachronistisch zu sein). Der Parameter ist vom Typ der Enumeration FileShare (siehe Tabelle 7.5).


Tabelle 7.5 Die Enumeration »FileShare«

Konstante Beschreibung

None

Weitere Versuche, diese Datei zu öffnen, werden konsequent abgelehnt.

Read

Die Datei darf von anderen Threads nur zum Lesen geöffnet werden.

Write

Die Datei darf von anderen Threads nur zum Editieren geöffnet werden.

ReadWrite

Die Datei darf von anderen Anwendungen oder Threads sowohl zum Lesen als auch zum Editieren geöffnet werden.


Durch die Parameter von Open können Sie eine Datei im gewünschten Modus öffnen. Ob Sie auf den Dateiinhalt zugreifen dürfen, ist damit nicht gesagt. Das Öffnen ist dafür eine notwendige, aber nicht hinreichende Voraussetzung (die Haustür ist offen, die Wohnungstür aber nicht unbedingt auch). Hier sehen Sie ein Beispiel dafür, wie eine Datei geöffnet wird:

Dim fs As FileStream = File.Open("C:\MyTestfile.txt", _ 
    FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None)

Die Parameter besagen, dass die Datei MyTestfile.txt im Stammverzeichnis C:\ geöffnet werden soll – falls es dort eine solche gibt. Wenn nicht, wird sie neu erzeugt. Der Inhalt der Datei lässt sich nach dem Öffnen sowohl lesen als auch ändern. Gleichzeitig werden weitere Zugriffe auf die Datei strikt unterbunden.

Weitere Öffnungsmethoden

File.Open ist die allgemeinste Variante, eine Datei zu öffnen. Die Klasse File bietet drei spezialisierte Formen an:


Public Shared Function OpenRead (path As String) As FileStream 
Public Shared Function OpenWrite(path As String) As FileStream 
Public Shared Function OpenText (path As String) As StreamReader

Mit OpenRead wird die angegebene Datei zum Lesen geöffnet, mit OpenWrite zum Schreiben. Diese beiden Methoden können, wie auch Open, Dateien beliebigen Inhalts öffnen. OpenText hingegen ist auf Textdateien spezialisiert. Das macht sich in einem unterschiedlichen Rückgabetyp bemerkbar. StreamReader liest einzelne Zeichen vom Typ Char, während FileStream uninterpretierte Bytes liest. Welche Bedeutung diese haben, wird durch die Interpretation des datenverarbeitenden Programms bestimmt. Damit bestimmt die Art der Daten, ob ein FileStream oder StreamReader angemessen ist. Erst nach dieser Entscheidung wird die passende Methode zum Lesen ausgesucht. Auf Details gehen wir später ein.

Öffnen einer Textdatei

Im folgenden Beispiel wird eine Textdatei geöffnet und der Inhalt an der Konsole ausgeben. Dazu wird im Code OpenText aufgerufen und die zurückgelieferte Referenz einer Objektvariablen des Typs StreamReader zugewiesen. Die Operationen, die im Zusammenhang mit dieser Klasse stehen, sollen uns an dieser Stelle noch nicht weiter interessieren.


'...\IO\Dateien\Textdatei.vb

Option Strict On 
Imports System.IO 
Namespace EA 
  Module Textdatei 
    Sub Test() 
      Console.Write("Zu öffnende Datei: ") 
      Dim strFile As String = Console.ReadLine() 
      If Not File.Exists(strFile) Then 
        Console.WriteLine("Die Datei {0} existiert nicht!", strFile) 
      Else 
        ' Datei öffnen 
        Dim sr As StreamReader = File.OpenText(strFile) 
        Dim zeile As String 
        zeile = sr.ReadLine() 
        ' zeilenweise Ausgabe an der Konsole 
        While zeile IsNot Nothing 
          Console.WriteLine(zeile) 
          zeile = sr.ReadLine() 
        End While 
        sr.Close() 
        Console.WriteLine("---- Programm- und Dateiende ----") 
      End If 
      Console.ReadLine() 
    End Sub 
  End Module 
End Namespace

Nach dem Start des Programms gibt der Anwender den Pfad zu einer Textdatei an. Dann wird mit File.Exists geprüft, ob die Datei im spezifizierten Pfad überhaupt vorhanden ist. Gibt es die Datei nicht, erscheint eine entsprechende Meldung an der Konsole. Existiert die Datei, wird sie mit File.OpenText geöffnet. In einer Schleife wird die Datei zeilenweise mit der Methode ReadLine des StreamReader-Objekts bis zum Dateiende eingelesen. Danach wird die Schleife beendet und die Datei geschlossen.

Einfach schreiben und lesen

Einfacher zu programmieren, aber weniger flexibel, sind die Methoden ReadAllBytes, ReadAllLines und ReadAlltext zum Lesen und die Methoden WriteAllBytes, WriteAllLines und WriteAllText zum Schreiben. Alle gehören zur Klasse File. Mit der simplen Anweisung

File.WriteAllText("C:\MyTextFile.txt", strText)

können Sie bereits den Inhalt der Variablen strText in die angegebene Datei schreiben. Existiert die Datei schon, wird sie einfach überschrieben. Genauso einfach ist das Lesen:

Console.WriteLine(File.ReadAllText("C:\MyTextFile.txt"))

Rheinwerk Computing - Zum Seitenanfang

7.3.2 Dateizugriff mit FileInfo Zur nächsten ÜberschriftZur vorigen Überschrift

Das Pendant zur der im vorigen Abschnitt beschriebenen Klasse File ist die ebenfalls nicht ableitbare Klasse FileInfo, die statt klassengebundener Methoden Instanzmethoden hat. Die Instanziierung erfolgt mit einem konkreten Dateipfad, zum Beispiel:

Dim myFile As New FileInfo("C:\TestDir\Testfile.txt")

Der Konstruktor prüft nicht, ob die Datei tatsächlich existiert. Bevor Sie Operationen ausführen, sollten Sie daher in jedem Fall vorher mit Exists prüfen, ob die Datei existiert.

If myFile.Exists Then ...

Während Exists in der Klasse File als Methode implementiert ist, der die Pfadangabe beim Aufruf übergeben werden muss, handelt es sich in der Klasse FileInfo um eine schreibgeschützte Eigenschaft des FileInfo-Objekts.

Eigenschaften

Die in Tabelle 7.6 aufgelistete Klasse FileInfo ist von FileSystemInfo abgeleitet. Sie ist auch Basisklasse der Klasse DirectoryInfo, die wir weiter unten ansprechen. Die Instanzeigenschaften beschreiben den Zustand der Datei, wie z. B. deren Länge oder Verzeichnis.


Tabelle 7.6 Eigenschaften von »FileInfo« (R = ReadOnly, Zeit-Eigenschaften auch als UTC)

Eigenschaft Beschreibung

Attributes

Dateiattribute (Hidden, Archive, ReadOnly usw.)

CreationTime

Erstellungsdatum der Datei

Directory

Instanz des Verzeichnisses

R

DirectoryName

Vollständige Pfadangabe, jedoch ohne den Dateinamen

R

Exists

Gibt an, ob die Datei existiert.

R

Extension

Dateierweiterung einschließlich des vorangestellten Punktes

R

FullName

Vollständige Pfadangabe einschließlich des Dateinamens

R

IsReadOnly

Gibt an, ob die Datei schreibgeschützt ist.

LastAccessTime

Zeit des letzten Zugriffs auf die Datei

LastWriteTime

Zeit des letzten schreibenden Zugriffs auf die Datei

Length

Gibt die Länge der Datei zurück.

R

Name

Vollständiger Name der Datei

R


Attributes vom Typ FileAttributes ist ein Bitfeld fester Größe. Jedes Attribut einer Datei wird durch Setzen eines einzelnen Bits beschrieben. Um festzustellen, ob ein Dateiattribut gesetzt ist, muss das alle Attribute beschreibende Bitfeld mit dem gesuchten Dateiattribut bitweise And-verknüpft werden. Weicht das Ergebnis von null ab, ist das Bit gesetzt.

Angenommen, das Attribut XYZ sei durch die Bitkombination 0000 1000 (= 8) beschrieben und das Bitfeld habe den Wert 0010 1001 (= 41). Die Prüfung

    0000 1000 
And 0010 1001 
-------------- 
=   0000 1000

ergibt nicht Nnull, das Attribut ist also gesetzt. Um aus einer Datei ein bestimmtes Attribut herauszufiltern, beispielsweise Hidden, gehen wir daher wie folgt vor:

Dim f As New FileInfo("C:\Testfile.txt") 
If 0 <> (f.Attributes And FileAttributes.Hidden) Then ... ' versteckte Datei

Zum Setzen verwenden wir den Or-Operator:

f.Attributes = f.Attributes Or FileAttributes.Hidden

In gleicher Weise können Sie mit den Methoden GetAttributes und SetAttributes der Klasse File arbeiten.

Methoden

Die Klassen File und FileInfo sind sich sehr ähnlich: Es lassen sich Dateien löschen, verschieben, umbenennen, kopieren, öffnen usw. (siehe Tabelle 7.7). Die meisten geben ein Stream-Objekt für weitergehende Operationen zurück.


Tabelle 7.7 Methoden vonin »FileInfo«

Methode Rückgabetyp Beschreibung

AppendText

StreamWriter

Hängt Text an eine existierende Datei an.

CopyTo

FileInfo

Kopiert die Datei an einen anderen Speicherort.

Create

FileStream

Erzeugt eine Datei.

CreateText

StreamWriter

Erzeugt eine neue Textdatei.

Delete

Löscht die Datei.

Exists

Boolean

Gibt an, ob die Datei existiert.

MoveTo

Verschiebt die Datei in einen anderen Ordner oder benennt sie um.

Open

FileStream

Öffnet eine Datei.

OpenRead

FileStream

Öffnet eine Datei zum Lesen.

OpenText

StreamReader

Öffnet eine Textdatei zum Lesen.

OpenWrite

FileStream

Öffnet eine Datei zum Schreiben.



Rheinwerk Computing - Zum Seitenanfang

7.3.3 Die Klassen Directory und DirectoryInfo Zur nächsten ÜberschriftZur vorigen Überschrift

Analog zu den Dateiklassen enthält Directory nur klassengebundene Methoden, während DirectoryInfo auf einer konkreten Instanz basiert. Der entscheidende Unterschied besteht in der internen Arbeitsweise. Zugriffe auf das Dateisystem setzen immer operative Berechtigungen voraus. Verfügt der Anwender nicht über die entsprechenden Rechte, wird die angeforderte Aktion abgelehnt. Die beiden Klassen File und Directory prüfen das bei jedem Zugriff erneut und belasten so das System unnötig, während die Überprüfung von den Klassen DirectoryInfo und FileInfo nur einmal ausgeführt wird.

Mit Directory kann man Ordner anlegen, löschen oder verschieben, die in einem Verzeichnis physikalisch gespeicherte Dateinamen abrufen und verzeichnisspezifische Eigenschaften sowie das Erstellungsdatum oder das Datum des letzten Zugriffs ermitteln (siehe Tabelle 7.8).


Tabelle 7.8 Methoden von »Directory«

Methode Beschreibung

CreateDirectory

Erzeugt ein Verzeichnis oder Unterverzeichnis.

Delete

Löscht ein Verzeichnis.

Exists

Überprüft, ob das angegebene Verzeichnis existiert.

GetCreationTime

Liefert das Erstellungsdatum samt Uhrzeit.

GetDirectories

Liefert die Namen aller Unterverzeichnisse eines spezifizierten Ordners.

GetFiles

Liefert alle Dateinamen eines spezifizierten Ordners.

GetFileSystemEntries

Liefert die Namen aller Unterverzeichnisse und Dateien eines spezifizierten Ordners.

GetParent

Liefert den Namen des übergeordneten Verzeichnisses.

Move

Verschiebt ein Verzeichnis samt Dateien.

SetCreationTime

Legt Datum und Uhrzeit eines Verzeichnisses fest.


Die Fähigkeiten der Klasse DirectoryInfo ähneln denen von Directory, setzen jedoch ein konkretes Objekt für den Zugriff auf die Elementfunktionen voraus.


Rheinwerk Computing - Zum Seitenanfang

7.3.4 Dateizugriffe in Aktion Zur nächsten ÜberschriftZur vorigen Überschrift

Im folgenden Beispiel werden einige Methoden und Eigenschaften der Klassen File, FileInfo und Directory benutzt. Das Programm fordert den Anwender dazu auf, an der Konsole ein beliebiges Verzeichnis anzugeben, dessen Unterverzeichnisse und Dateien ermittelt und unter Angabe der Dateigröße und der Dateiattribute an der Konsole ausgegeben werden.


'...\IO\Dateien\Dir.vb

Option Strict On 
Imports System.IO 
Namespace EA 
  Module Dir 
    Sub Test() 
      Console.Write("Zu durchsuchender Ordner ") 
      Dim dir As String = Console.ReadLine() 
      ' Pfad muss mit \ enden 
      If dir.Substring(dir.Length – 1) <> "\" Then dir += "\"

      For Each el As String In Directory.GetFileSystemEntries(dir) 
        If 0 = (File.GetAttributes(el) And FileAttributes.Directory) Then 
          Dim datei As New FileInfo(el) 
          Console.WriteLine("{0,-30}{1,25} kB {2,-10} ", _ 
            el.Substring(dir.Length – 1), datei.Length / 1024, _ 
                                      GetFileAttributes(datei)) 
        Else 
          Console.WriteLine("{0,-30}{1,-15}", _ 
                            el.Substring(dir.Length), "Dateiordner") 
        End If 
      Next 
      Console.ReadLine() 
    End Sub

    Function GetFileAttributes(ByVal datei As FileInfo) As String 
      Dim attr As String = "" 
      Dim tp As Type = GetType(FileAttributes) 
      For Each fa As FileAttributes In [Enum].GetValues(tp) 
        If 0 <> (fa And datei.Attributes) Then _ 
          attr += [Enum].GetName(tp, fa).Substring(0, 1) 
      Next 
      Return attr 
    End Function 
  End Module 
End Namespace

Eine typische Ausgabe zeigt Abbildung 7.2.

Abbildung 7.2 Beispielausgabe mit »Dir«

Die Pfadangabe des Anwenders wird immer mit einem Backslash abgeschlossen, damit die Ausgabe immer gleich aussieht (Substring kappt den kompletten Pfad). In einer Schleife werden die von GetFileSystemEntries gelieferten Verzeichniseinträge durchlaufen. Jeder Eintrag kann sowohl eine Datei- als auch eine Verzeichnisangabe enthalten. Handelt es sich um ein Verzeichnis, ist das Attribut Directory gesetzt. Mit

If 0 = (File.GetAttributes(el) And FileAttributes.Directory) Then

wird das geprüft. Die Bedingung liefert True, wenn eine Datei vorliegt.

Da das Programm die Größe der Datei ausgeben soll, können wir nicht mit File arbeiten, da mit ihr keine Dateilänge ermittelt werden kann. Deswegen erledigt die Eigenschaft Length der Klasse FileInfo den Job.

Die Methode GetAttributes dient dazu, das übergebene FileInfo-Objekt auf die Attribute Hidden, ReadOnly, Archive und System hin zu untersuchen. Aus dem Ergebnis wird eine Zeichenfolge zusammengesetzt.


Rheinwerk Computing - Zum Seitenanfang

7.3.5 Pfade mit Path Zur nächsten ÜberschriftZur vorigen Überschrift

Die Klassen File und Directory greifen immer wieder auf Pfadangaben zurück. Eine Pfadangabe beschreibt den Ort einer Datei oder eines Verzeichnisses. Die Schreibweise ist betriebssystemabhängig; manche starten mit einer Laufwerksangabe. Das Trennzeichen zwischen Verzeichnissen ist ebenfalls plattformspezifisch. Windows benutzt in der Regel den Backslash (\), Unix einen Slash (/). Die nicht ableitbare Klasse Path ermöglicht plattformunabhängige Pfadangaben. Außerdem kann sie eine Pfadangabe in ihre Bestandteile zerlegen. Schließlich gibt uns Path das Verzeichnis für temporäre Dateien.

Methoden

Alle Path-Klassenmitglieder sind klassengebunden und haben die Aufgabe, eine Pfadangabe in einer bestimmten Weise zu filtern (siehe Tabelle 7.9).


Tabelle 7.9 Methoden von »Path«

Methode Beschreibung

GetDirectoryName

Das Verzeichnis einer gegebenen Pfadangabe

GetExtension

Dateierweiterung einschließlich des führenden Punktes

GetFileName

Liefert den vollständigen Dateinamen.

GetFileNameWithoutExtension

Liefert den Dateinamen ohne Dateierweiterung.

GetFullPath

Liefert die komplette Pfadangabe.

GetPathRoot

Liefert das Stammverzeichnis.


Beachten Sie dabei, dass keine dieser Methoden testet, ob die Datei oder das Verzeichnis tatsächlich existiert. Es werden lediglich die Zeichenkette und die Vorschriften der spezifischen Plattform zur Bestimmung des Ergebnisses herangezogen. Mit

Dim strPath As String = "C:\winnt\system\OLE2.dll"

liefern die Methoden die folgenden Rückgaben:

Console.WriteLine(Path.GetPathRoot(strPath))      ' C:\ 
Console.WriteLine(Path.GetDirectoryName(strPath)) ' C:\winnt\system 
Console.WriteLine(Path.GetFileNameWithoutExtension(strPath)) ' OLE2 
Console.WriteLine(Path.GetFileName(strPath))      ' OLE2.dll 
Console.WriteLine(Path.GetFullPath(strPath))      ' C:\winnt\system\OLE2.dll 
Console.WriteLine(Path.GetExtension(strPath))     ' .dll

Temporäre Verzeichnisse

Viele Anwendungen arbeiten mit temporären Dateien. Die Methode GetTempPath der Klasse Path liefert das temporäre Verzeichnis des aktuell angemeldeten Benutzers.


Public Shared Function GetTempPath() As String

Unter Windows XP finden Sie dieses Verzeichnis standardmäßig unter dem Namen Temp in:

C:\Dokumente und Einstellungen\Username\Lokale Einstellungen

Mit GetTempFileName wird eine leere Datei im temporären Verzeichnis angelegt. Der Rückgabewert ist die komplette Pfadangabe:


Public Shared Function GetTempFileName() As String

Eine temporäre Datei kann dazu benutzt werden, Zwischenergebnisse zu speichern, Informationen kurzfristig zu sichern und Abläufe zu protokollieren. Allerdings sollten Sie nicht vergessen, temporäre Dateien nach Gebrauch auch wieder zu löschen.


Rheinwerk Computing - Zum Seitenanfang

7.3.6 Laufwerksinformation mit DriveInfo Zur nächsten ÜberschriftZur vorigen Überschrift

Mit DriveInfo können Sie bestimmen, welche Laufwerke verfügbar sind und um welchen Typ von Laufwerk es sich dabei handelt. Zudem können Sie die Kapazität und den verfügbaren freien Speicherplatz auf dem Laufwerk ermitteln. Tabelle 7.10 listet die Eigenschaften von DriveInfo auf.


Tabelle 7.10 Eigenschaften von »DriveInfo«

Eigenschaft Rückgabetyp Beschreibung

AvailableFreeSpace

Long

Freier Speicherplatz auf einem Laufwerk

DriveFormat

String

Ruft den Namen des Dateisystems ab.

DriveType

DriveType

Ruft den Laufwerkstyp ab.

IsReady

Boolean

Gibt an, ob das Laufwerk bereit ist.

Name

String

Liefert den Namen des Laufwerks.

RootDirectory

DirectoryInfo

Liefert das Stammverzeichnis des Laufwerks.

TotalFreeSpace

Long

Liefert den verfügbaren Speicherplatz.

TotalSize

Long

Gesamter Speicherplatz auf einem Laufwerk

VolumeLabel

String

Datenträgerbezeichnung eines Laufwerks


Die Eigenschaft DriveType ist vom Typ der gleichnamigen Enumeration. Diese hat insgesamt sieben Mitglieder, die Sie der Tabelle 7.11 entnehmen können.


Tabelle 7.11 Die Enumeration »DriveType«

Member Beschreibung

CDRom

Optischer Datenträger (z. B. CD oder DVD)

Fixed

Festplatte

Network

Netzlaufwerk

NoRootDirectory

Das Laufwerk hat kein Stammverzeichnis.

Ram

RAM-Datenträger

Removable

Wechseldatenträger

Unknown

Unbekannter Laufwerkstyp



Rheinwerk Computing - Zum Seitenanfang

7.3.7 SpecialDirectories topZur vorigen Überschrift

My.Computer.FileSystem.SpecialDirectories listet Windows-spezifischer Pfade, zum Beispiel den zu Eigene Bilder. Die Angaben werden über die in Tabelle 7.12 gezeigten statischen Eigenschaften als Zeichenfolge geliefert.


Tabelle 7.12 Die Klasse »SpecialDirectories«

Eigenschaft Beschreibung

AllUserApplicationData

Anwendungsdaten aller Benutzer, typischerweise \Dokumente und Einstellungen\All Users\ Anwendungsdaten.

CurrentUserApplicationData

Anwendungsdaten des aktuellen Benutzers

Desktop, MyDocuments, MyMusic, MyPictures, ProgramFiles, Programs, Temp

Pfad zu Desktop, Eigene Dateien, Eigene Musik, Eigene Bilder, Program Files, Programme, Temp.




Ihre Meinung

Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.

<< zurück
  Zum Rheinwerk-Shop
Zum Rheinwerk-Shop: Visual Basic 2008
Visual Basic 2008
Jetzt Buch bestellen


 Ihre Meinung?
Wie hat Ihnen das Openbook gefallen?
Ihre Meinung

 Buchempfehlungen
Zum Rheinwerk-Shop: Visual Basic 2012






 Visual Basic 2012


Zum Rheinwerk-Shop: Schrödinger programmiert C++






 Schrödinger
 programmiert C++


Zum Rheinwerk-Shop: IT-Handbuch für Fachinformatiker






 IT-Handbuch für
 Fachinformatiker


Zum Rheinwerk-Shop: Professionell entwickeln mit Visual C# 2012






 Professionell
 entwickeln mit
 Visual C# 2012


Zum Rheinwerk-Shop: Windows Presentation Foundation






 Windows Presentation
 Foundation


 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und der Schweiz
InfoInfo




Copyright © Rheinwerk Verlag GmbH 2009
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.


Nutzungsbestimmungen | Datenschutz | Impressum

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de

Cookie-Einstellungen ändern