|
Home - Programmieren - Visual Basic - Fortgeschrittene Techniken mit den FSO (VB)
Hinweis: Für den hier dargestellte Inhalt ist nicht der Betreiber der Plattform, sondern der jeweilige Autor verantwortlich. Falls Sie Missbrauch vermuten, bitten wir Sie, uns unter missbrauch@it-academy.cc zu kontaktieren. [Druckansicht] [Als E-Mail senden] [Kommentar verfassen] Einleitung Dies ist der zweite Teil einer Artikelreihe über die FSO-Programmierung mit Visual Basic. Falls Sie den ersten Teil noch nicht gelesen haben, empfehle ich Ihnen vor der Lektüre dieses Artikels einen Blick in den ersten Teil "Einführung in die Arbeit mit den FSO" zu werfen. Dort werden Grundlagen, wie zum Beispiel der Aufbau der FSO, Einfügen der FSO in die Entwicklungsumgebung und die Bereitstellung eines globalen FSO-Objekts behandelt, die für das Verständnis und das Nachvollziehen dieses Artikels am Computer erforderlich sind. Dieser Artikel gliedert sich in drei große Abschnitte. Ein grober Überblick über die anstehenden Themen:
Laufwerke Das Drive-Objekt bietet dem Programmierer Zugriff auf Informationen über Laufwerkart, belegten und freien Speicherplatz und weiteren interessanten Funktionen und Eigenschaften. Existenz eines Laufwerks prüfen Die Methode DriveExists wird direkt vom übergeordneten FSO-Objekt angeboten. Sie erwartet lediglich den Laufwerksbuchstaben mit einem angehängten Doppelpunkt (als String) des auf Existenz zu überprüfenden Laufwerks. Als Ergebnis gibt die Funktion einen booleschen Wert zurück; True, wenn das Laufwerk existiert, False, wenn nicht.
Das Drive-ObjektDieser Abschnitt zeigt, wie Sie ein Drive-Objekt erzeugen und diesem ein bestimmtes Laufwerk zuweisen. Wird ein gültiges Drive-Objekt zurückgegeben, können Sie über die Eigenschaften und Methoden des Objekts Informationen über das Laufwerk herausfinden oder selbst Werte setzen.
Ein Fehler könnte zum Beispiel auftreten, wenn das als String an GetDrive übergebene Laufwerk nicht vorhanden ist.Liste aller verfügbaren Laufwerke Da wir nun in der Lage sind, ein Drive-Objekt zu erzeugen und ihm einen gültigen Verweis auf ein Laufwerk zuzuweisen, haben wir nun verschiedene Möglichkeiten die in diesem Objekt enthaltenen Informationen zu nutzen. Da d ein Objekt ist, können wir es in Verbindung mit einer For … Each-Schleife nutzen, um heraus zu finden, welche Laufwerke das System zur Verfügung stellt.
Über die Auflistung Drives des FSO-Objekts können wir alle verfügbaren Laufwerke ermitteln.Anzahl der Laufwerke ermitteln Die Anzahl der verfügbaren Laufwerke zu ermitteln ist nun auch kein Problem mehr. Dies geschieht über die Count-Eigenschaft von Drives.
Testen, ob ein Laufwerk bereit istBei Laufwerken mit Wechselmedien kann es vorkommen, dass gerade kein Medium eingelegt ist. Wenn Sie dann auf bestimmte Eigenschaften des Objekts zugreifen wird ein Fehler ausgelöst. Um dies zu verhindern, können Sie mit der Eigenschaft IsReady testen, ob das Laufwerk bereit ist, d.h. herausfinden, ob ein Datenträger eingelegt ist.
Umrechnen von Byte in Kilo-, Mega-, Giga- und TeraByteMit dem Drive-Objekt kann man den freien, belegten und den insgesamt zur Verfügung stehenden Speicherplatz auf einem Datenträger bzw. eines Laufwerks ermitteln. Diese Werte werden immer in Byte zurückgegeben. Um eine bessere Lesbarkeit des Wertes zu gewährleisten, sollte man die Byteangabe in entsprechende gängige Maßeinheiten umrechnen. Der folgende Code zeigt wie das geht (von Byte bis TeraByte). Peta- und ExaByte werden nicht berücksichtigt, da diese Größen nur selten benötigt werden.
Wenn der an die Funktion übergebene Wert durch 1024 ganzzahlig teilbar ist, und das Ergebnis dieser Division größer oder gleich 1024 ist, so kann die nächst größere Einheit genommen werden, um den Wert formatiert darzustellen. Ein Beispiel:
Die einzige Einschränkung, die diese Funktion besitzt ist, dass die Werte nicht auf mehrere Stellen gerundet werden. Der Vorteil daran ist, dass diese Funktion sehr schnell läuft, da eine ganzzahlige Division (mit \) sehr viel schneller als eine normale Division (mit /) durchgeführt werden kann. Wer auf die Nachkommastellen nicht verzichten kann, nimmt folgende Funktion.
Somit wäre auch dieses Problem gelöst. Eine Anwendung der Funktionen wird im nächsten Abschnitt demonstriert.Speicherplatz ermitteln Das Drive-Objekt stellt uns zwei Eigenschaften zur Verfügung, um den freien und den gesamten Speicherplatz zu ermitteln. Subtrahiert man den freien vom gesamten Speicherplatz, so erhält man zusätzlich noch Informationen über den belegten Speicherplatz.
Hier wird die im letzten Abschnitt entwickelte Funktion ByteToString2 benutzt, um den Speicherplatz inklusive 2 Nachkommastellen anzuzeigen.Laufwerkstyp Über die Eigenschaft DriveType kann der Laufwerkstyp ermittelt werden. Es gibt insgesamt 6 verschiedene Arten. Die entsprechende Enumeration für diese Eigenschaft heißt Scripting.DriveTypeConstants.
Hier eine einfache Funktion mit der man den Laufwerkstyp im Klartext ermitteln kann.
Ein Beispiel für den Aufruf der Funktion:
Dateisystem ermittelnUnter Windows ME hatte man noch keine Wahl, welches Dateisystem man verwenden wollte, denn es hatte definitiv das Dateisystem FAT32. Genauso war es mit Windows NT. Auch dieses Betriebssystem konnte nur mit dem Dateisystem NTFS arbeiten. Also eine gute Grundlage, um das Betriebssystem eines Computers mit den FSO zu ermitteln? Nicht ganz. Seit Windows XP kann der Anwender entscheiden, welches Dateisystem er verwenden möchte. Standardmäßig ist zwar immer noch FAT32 bei neu ausgelieferten PCs eingestellt, aber dies kann der Anwender selbst über eine Konvertierungsfunktion ändern. Auch wenn das Betriebssystem noch nicht vom Hersteller/Verkäufer des PC-Systems installiert wurde, und der User sein Windows XP selbst installieren und konfigurieren muss, hat er die Wahl zwischen NTFS und FAT32-Dateisystem. Die Vor- und Nachteile der beiden Dateisysteme zu beleuchten würde den Rahmen dieses Artikels bei weitem sprengen. Allerdings kann ich Ihnen zeigen, wie Sie mit Hilfe der FSO das Dateisystem ermitteln. Welche Schlussfolgerungen Sie daraus ziehen bleibt Ihnen überlassen.
Stammverzeichnis ermittelnDas Drive-Objekt bietet gleich zwei Eigenschaften, die darauf schließen lassen, dass hierdurch das Stammverzeichnis als String zurückgegeben werden könnte. Tatsächlich tun dies auch beide Eigenschaften, wenngleich mit einem kleinen Unterschied. Während die Path-Eigenschaft immer das Stammverzeichnis ohne \ zurückgibt, wird der Backslash bei der Eigenschaft RootFolder immer angehängt. Somit verhält sich Path bei einem nicht-virtuellem Laufwerk immer wie die DriveLetter-Eigenschaft des Drive-Objekts. RootFolder hingegen weist sehr viel mehr Funktionalität auf als zunächst gedacht. Tatsächlich ist RootFolder ein eigenes Folder-Objekt und kann auch als solches eingesetzt werden.
Freigabenamen ermittelnBei Netzlaufwerken kann es interessant sein, den dazugehörigen Freigabenamen zu ermitteln, da dieser häufig nicht mit dem Originalnamen übereinstimmt.
Datenträgerbezeichnung und SeriennummerZum Schluss der Behandlung des Drive-Objekts möchte ich Ihnen noch zeigen, wie Sie die Bezeichnung eines Datenträgers auslesen. Ebenso wichtig (z. B. für eine Kopierschutzfunktion) ist die Seriennummer eines Datenträgers.
Beide Werte werden als String zurückgegeben (auch die Seriennummer!). Die beiden Eigenschaften funktionieren auch mit Netzlaufwerken.Textdateien Textdateien werden sehr häufig in Programmen benutzt, z. B. um Konfigurationen oder andere für die Ausführungsgeschwindigkeit des Programms nicht so relevanten Daten zu speichern (dann würde es besser sein, eine Datenbank zu benutzen). Zwar kann man Dateien auch mit VB öffnen, bearbeiten, Text hinein schreiben und lesen, allerdings ist das meistens nicht sehr komfortabel. Daher gibt es eine eigene Klasse TextStream in den FSO, die häufig benötigte Funktionen für die Arbeit mit Textdateien zur Verfügung stellt. Nachfolgend der Code, den Sie benötigen, um ein Objekt der Klasse zu deklarieren.
Textdatei erstellenEine Textdatei zu erstellen ist mit Hilfe des FSO-Objekts ein Zweizeiler. Außerdem wird gleichzeitig die Datei auch noch für die Bearbeitung geöffnet.
Über die Methode CreateTextFile des FSO-Objekts können Sie eine neue Textdatei erstellen. Als ersten Parameter übergeben Sie dafür den Dateinamen, der zweite Parameter gibt an, ob eine eventuell schon vorhandene Datei mit gleichem Namen überschrieben werden soll. Wenn Sie True angeben, wird die Datei überschrieben, wenn Sie False angeben, wird keine neue Datei erstellt. Die Methode gibt ein Objekt vom Typ TextStream zurück. Sie öffnet auch gleichzeitig diese Textdatei, sodass eine entsprechende Methode (s. nächster Abschnitt) nicht mehr aufgerufen werden muss.Textdatei öffnen Bevor Sie Zugriff auf eine Textdatei erlangen, müssen Sie diese ähnlich wie in konventioneller Visual Basic-Manier öffnen, damit das TextStream-Objekt weiß, auf welche Datei sich die Aktionen beziehen, die über es selbst ausgeführt werden. Eine Datei kann ForWriting (zum Schreiben), ForReading (zum Lesen) oder ForAppending (zum Anhängen von Text an eine vorhandene Datei) geöffnet werden.
Wenn die Datei noch nicht existiert, wird bei ForAppending ein Fehler ausgelöst. Um dies zu verhindern, kann man den dritten Parameter Create auf True setzen (standardmäßig ist dieser auf False gesetzt).
Text schreibenMit dem TextStream-Objekt erhalten Sie gleich mehrere Möglichkeiten komfortabel Text in einer Textdatei unterzubringen. Hier sollen die drei am häufigsten benutzten Methoden kurz vorgestellt werden. Die erste dieser drei Möglichkeiten ist die Methode WriteLine. Übergeben wird der in die Datei zu schreibende Text. Es wird automatisch ein Zeilenumbruch erzeugt, sodass Sie direkt in der nächsten Zeile weiter schreiben können. Die Methode Write funktioniert ähnlich wie WriteLine, nur das kein automatischer Zeilenumbruch erfolgt. Die Cursorposition verbleibt also in der gerade geschriebenen Zeile. Schließlich gibt es noch die Methode WriteBlankLines. Über diese kann man leere Zeilen in eine Textdatei einfügen, was praktisch ist, wenn man z. B. einen bestimmten Wert in einer Konfigurationsdatei nicht setzen möchte. Nachfolgend ein paar Beispiele für die oben beschriebenen Methoden.
Inhalt der Datei nach der Ausführung des obigen Codes:
Inhalt der Datei nach der Ausführung des obigen Codes:
Inhalt der Datei nach der Ausführung des obigen Codes:
Textdatei lesenDas Lesen einer Textdatei gestaltet sich ebenso einfach wie das Schreiben. Auch hier gibt es mehrere Möglichkeiten den Text einzulesen - je nachdem, was man nachher damit vor hat. Um den gesamten Text einer Datei in eine Stringvariable einzulesen, bedient man sich zum Beispiel der Methode ReadAll des TextStream-Objekts. Um eine einzelne Zeile zu lesen, rufen Sie die Methode ReadLine auf. Hier können Sie die Eigenschaft AtEndOfStream einsetzen, um herauszufinden, ob Sie sich am Ende der Datei befinden. Ein entsprechendes Codebeispiel finden Sie am Ende dieses Abschnitts. Ähnlich wie beim Schreiben können Sie über SkipLine eine Zeile beim Auslesen einer Textdatei überspringen. Und das ist noch nicht alles: mit der Methode Skip ist es möglich sogar eine beliebige Anzahl an Zeichen zu überspringen. Schließlich können Sie über Line und Column die aktuelle Zeile und Spalte des Dateicursors auslesen. Ein paar Codebeispiele verdeutlichen die Funktionsweise der oben beschriebenen Methoden. Die Datei die eingelesen werden soll, enthält folgende Zeilen:
Die Variable strAusgabe enthält nach Ausführung des Codes den Wert
Somit ist dies ein exzellenter Weg um Steueranweisungen für das Einlesen einer Textdatei in den Text selbst einzubauen.Textdatei schließen Nach getaner Arbeit muss das TextStream-Objekt wieder geschlossen werden. Dafür wird die Close-Methode aufgerufen, die keine Parameter erwartet:
Systemverzeichnisse und temporäre DateienDer letzte Teil dieses Artikels befasst sich mit Verzeichnissen, denen im Computer eine besondere Bedeutung zukommt, den Systemverzeichnissen. Da das temporäre Verzeichnis ein besonders interessantes Verzeichnis unter diesen Spezialverzeichnissen ist, erkläre ich in diesem Abschnitt auch die Erzeugung von temporären Dateinamen - alles mit Hilfe der FSO. Systemverzeichnisse ermitteln Das FSO-Objekt stellt uns eine gesonderte Methode zur Verfügung, um den Pfad zu speziellen Ordnern zu ermitteln (diese sind in jedem System anders; so ist es zum Beispiel auch möglich, das Betriebssystem nicht nach C:\Windows zu installieren). Diese Methode heißt GetSpecialFolder und erwartet eine Konstante aus der Enumeration Scripting.SpecialFolderConst, die angibt zu welchem Systemverzeichnis der Pfad ermittelt werden soll. Folgende Konstanten sind zugelassen.
Die Ausgabe dieser drei Verzeichnisse über eine Visual Basic MessageBox lässt sich folgendermaßen realisieren.
Temporäre DateinamenFalls man eine temporäre Datei benutzen muss, sich als Programmierer aber nicht sicher ist, ob eine gleichnamige Datei vielleicht schon im temporären Verzeichnis existiert, kann man über die Methode GetTempFile (ohne Parameter) einen automatisch und zufällig generierten Dateinamen für eine temporäre Datei erhalten, die noch nicht existiert. Die Dateinamen fallen zwar etwas kryptisch aus, sind aber in jedem Fall korrekt.
Zusammenfassung und AusblickIn diesem Artikel haben Sie gelernt:
|
Autoren:03760
Artikel:00815 Glossar:04618 News:08554 Userbeiträge:16077 Queueeinträge:00024
Unternehmensimage im Internet aufbauen
Hotels.com geht Offline DMSFACTORY erleichtert Implementierung von DMS über Skype [Mehr News]
Ihre Anforderungen an ein Online-Zeiterfassungs-Produkt?
|