Visual Basic Forum

Visual Basic Forum
für VB6 und VB.NET Programmierer
 
RegistrierenRegistrieren  LoginLogin

Neues Thema eröffnen   Neue Antwort erstellen    Visual Basic Forum Foren-Übersicht -> [VB6] Tutorials
Autor
Nachricht
ZiG
Überflieger
Überflieger

Anmeldedatum: 16.04.2008
Beiträge: 421

FSO Teil1 - Dateioperationen
Verfasst am: 15.06.2009, 12:35


Thema: FSO Teil 1 - Dateioperationen

Autor: ZiG


Index:
1. Einleitung
2. Deklarationen
3. Lesezugriff
3.1 Zeilen
3.2 Bytes
4. Schreibvorgang
4.1 Zeilen
4.2 Bytes
5. Kopieren
6. Verschieben
7. Umbenennen
8. Löschen
9. Abschluss


1. Einleitung

Was ist FSO?

FSO steht für "File System Objects" und ist eine Objektklasse durch die man relativ einfach mit Dateien, Laufwerken und Ordnern arbeiten kann.
Egal ob verschieben, kopieren, lesen, schreiben oder suchen.

Vor- und Nachteile gegenüber Input, Line Input etc.

Vorteile:
1. Kann mit verschiedensten Zeilenumbrucharten umgehen und nicht nur mit vbCrLf/vbNewline (Chr(13) + Chr(10).
Auf andere Zeilenumbrüche stößt man oft bei wordlists oder sql files.

2. Relativ einfache Handhabung. Kein rumärgern mit Datensatznummern.

Nachteile:
1. Es muß die "scrrun.dll" mitgeliefert werden bzw. schon auf dem System vorhanden sein.
2. Ist etwas langsamer beim einlesen von Dateien.


In diesem tutorial möchte ich euch erklären wie man mit FSO Dateioperationen durchführt.


2. Deklarationen

Als erstes brauchen wir einen Verweis auf "Microsoft Scripting Runtime".
Zu finden unter "Projekt -> Verweis".

Und dann deklarieren wir das Objekt.
Wenn ihr von verschiedenen Formen darauf zugreifen wollt, dann natürlich public.

Code:
Private FSO As New FileSystemObject
Und jetzt da wir Dateien auslesen bzw. schreiben wollen brauchen wir noch einen TextStream.
Code:
Private tStream as TextStream
Für kopieren, verschieben, löschen usw. wird dies nicht benötigt.



3. Lesezugriff

Wie sieht also die Syntax zum öffnen einer Datei aus?
Code:
Set tStream = FSO.OpenTextFile(Filename, IOMode, Create)
(tStream)
Unsere TextStream Variable.

(.OpenTextFile)
Wir wollen eine Textdatei öffnen.

(Filename)
Hier gibt man den Pfad zur Datei an.

(IOMode)
Möglichkeiten:

1. ForAppending
2. ForReading
3. ForWriting

Wir brauchen also ForReading.

(Create)
Hier kann man bestimmen ob eine nicht existierende Datei erstellt werden soll oder nicht.
Verlangt True oder False.


3.1 Zeilen

Beispiel: Anzahl Zeilen einer Textdatei ermitteln.
Code:
Dim zCount As Long 'Variable für Zeilenanzahl<br /><br />'Datei öffnen<br />Set tStream = FSO.OpenTextFile("C:test.txt", ForReading, False)<br /><br />zCount = 0<br />'Schleife zum zählen<br />Do Until tStream.AtEndOfStream<br /> tStream.SkipLine<br /> zCount = zCount + 1<br /> DoEvents<br />Loop<br />tStream.Close
(tStream.AtEndOfStream)
Die Schleife läuft so lange, bis das Ende des Streams, der Datei erreicht ist.

Hier gibt es noch die Option "AtEndOfLine".
Da würde die Schleife klarerweise nur bis zum Ende der Zeile laufen, in der sich der Zeiger gerade befindet.

(tStream.SkipLine)
Die Zeile wird übersprungen.
Da wir nur Zeilen zählen wollen, brauchen wir nicht jede Zeile extra einlesen.

(zCount = zCount + 1)
Zeilenanzahl wird um 1 erhöht.

(DoEvents)
DoEvents benötigt man, da sonst diese Schleife das Programm so auslasten würde, dass es einfriert.
Besser wäre es aber DoEvents durch die gepostete Version "NewDoEvents" bei den sources, zu ersetzen.
Dann wird DoEvents nicht bei jedem einzelnen Aufruf ausgeführt und man erhöht dadurch die Leistung.

(tStream.Close)
Der Stream wird wieder geschloßen.

Der code lässt sich gut in eine Funktion auslagern.
Somit kann man überall schnell und einfach die Zeilenanzahl ermitteln lassen.
Praktisch wenn man den Fortschritt in einer Progressbar anzeigen will.


Zeilen einlesen

Code:
Do Until tStream.AtEndOfStream<br /> Text1.SelText = tStream.ReadLine & vbCrLf<br /> DoEvents<br />loop<br />tStream.close
(tStream.ReadLine)
Hiermit liest man also eine Zeile ein.



3.2 Bytes

Datei einfach wieder ganz normal im Lesezugriff öffnen.

Bestimmte Anzahl an bytes überspringen.
Beispiel mit 100 Bytes.
Code:
tStream.Skip (100)
Bestimmte Anzahl an bytes einlesen.
Beispiel mit 100 Bytes.
Code:
Text1.Text = tStream.Read(100)
Komplette Datei auf einmal einlesen
Code:
Text1.Text = tStream.ReadAll
4. Schreibvorgang

Datei für den Schreibmodus öffnen.
Code:
set tstream = fso.OpenTextFile(Filename, ForWriting, True)
So wird also die Textdatei im Schreibmodus geöffnet und falls sie nicht existiert soll er sie gleich erstellen.

Genauso könnte man hier Append nutzen.

4.1 Zeilen

Eine Zeile in die Datei schreiben:
Code:
tStream.WriteLine("Text")
Ist also eigentlich sehr simpel.

Außerdem gibt es noch die Möglichkeit eine bestimmte Anzahl an leeren Zeilen auf einmal zu schreiben.
Code:
tStream.WriteBlankLines(10)
In diesem Fall also 10 Zeilen.

4.2 Bytes

Text schreiben.
Code:
tStream.Write("Text")
Manche werden sich jetzt fragen was der Unterschied zwischen Writeline und Write ist.
Eigentlich nur ein kleiner.
Writeline macht automatisch einen Zeilenumbruch nach dem Text.
Und Write eben nicht. Kommt also auf die Situation an, was man braucht.


5. Kopieren

Die meisten von euch kennen wahrscheinlich die Funktion "FileCopy" von VB6 und das selbe gibt es auch bei dem FSO.
Nur das man hier noch angeben kann ob eine vorhandene Datei überschrieben werden soll oder nicht.

Syntax:
Code:
Call FSO.CopyFile(Source, Destination, OverWriteFiles)
Natürlich könnt ihr das auch ohne Klammern und Call schreiben.

(.CopyFile)
Wir nutzen die Funktion CopyFile.

(Source)
Benötigt den Pfad zur Datei, die kopiert werden soll.

(Destination)
Benötigt den Pfad wohin die Datei kopiert werden soll.

(OverWriteFiles)
Hier könnt ihr also gleich bestimmen ob eine schon existierende Datei einfach überschrieben wird, oder nicht.
Verlangt natürlich einen Boolean Wert. True oder False.

6. Verschieben

Syntax:
Code:
Call FSO.MoveFile(Source, Destination)
Wir benutzen also ".MoveFile".
Source und Destination sollte jetzt klar sein.
Aus welchem Grund auch immer kann man mit der Funktion leider die Dateien nicht auf ein anderes Laufwerk verschieben.
Eine andere Partition die sich auf der selben HDD geht, aber ein anderes Laufwerk nicht.
Da muß man dann einfach die Datei kopieren und danach löschen.


7. Umbenennen

Syntax:
Code:
Call FSO.MoveFile(Source, Destination)
Wieder .MoveFile.
Man gibt einfach den selben Pfad, aber einen anderen Dateinamen an.

8. Löschen

Syntax:
Code:
Call FSO.DeleteFile(FileSpec, Force)
(.DeleteFile)
Funktion zum löschen einer Datei

(FileSpec)
Hier gibt man den Pfad zur Datei als string an.

(Force)
Und hier noch etwas nettes.
Hier kann man bestimmen ob eine schreibgeschützte Datei auch gelöscht werden soll oder nicht.
Erwartet also True oder False.


9. Abschluss

Und das wars wieder mal.
Ich werde noch versuchen weiter Themen über das FSO zu behandeln wie das arbeiten mit Ordnern bzw. das suchen/ermitteln von Ordnern und Dateien auf Laufwerken.

Hoffe es war nicht zuviel auf einmal und ihr hattet Spaß dran.^^

mfg, ZiG


Ps.: Falls Fehler entdeckt werden, dienen diese zur allgemeinen Belustigung und als C&P Protection.
_________________
 
Neues Thema eröffnen   Neue Antwort erstellen    Visual Basic Forum Foren-Übersicht -> [VB6] Tutorials

Tags: fso datei, fso dateioperationen, vb6

 
 Verwandte Themen   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge Wie kann ich mich bei euch anmelden?? 387 20.05.2002, 01:28
Keine neuen Beiträge Eine kleine Frage an euch.. 373 30.09.2007, 09:57
Keine neuen Beiträge TopMost Funktion unter DirectX 432 27.07.2007, 11:48
Keine neuen Beiträge Wie Funktion nutzen ? 540 29.06.2007, 21:59
Keine neuen Beiträge update funktion einbauen 741 29.01.2007, 00:11
 



[ Time: 0.2445s ][ Queries: 81 (0.0767s) ][ GZIP on - Debug on ]