ABOUT Visual Basic Programmieren Programmierung Download Downloads Tips & Tricks Tipps & Tricks Know-How Praxis VB VBA Visual Basic for Applications VBS VBScript Scripting Windows ActiveX COM OLE API ComputerPC Microsoft Office Microsoft Office 97 Office 2000 Access Word Winword Excel Outlook Addins ASP Active Server Pages COMAddIns ActiveX-Controls OCX UserControl UserDocument Komponenten DLL EXE
Diese Seite wurde zuletzt aktualisiert am 05.06.2000

Diese Seite wurde zuletzt aktualisiert am 05.06.2000
Aktuell im ABOUT Visual Basic-MagazinGrundlagenwissen und TechnologienKnow How, Tipps und Tricks rund um Visual BasicAddIns für die Visual Basic-IDE und die VBA-IDEVBA-Programmierung in MS-Office und anderen AnwendungenScripting-Praxis für den Windows Scripting Host und das Scripting-ControlTools, Komponenten und Dienstleistungen des MarktesRessourcen für Programmierer (Bücher, Job-Börse)Dies&Das...

Themen und Stichwörter im ABOUT Visual Basic-Magazin
Code, Beispiele, Komponenten, Tools im Überblick, Shareware, Freeware
Ihre Service-Seite, Termine, Job-Börse
Melden Sie sich an, um in den vollen Genuss des ABOUT Visual Basic-Magazins zu kommen!
Informationen zur AVB-Web-Site, Kontakt und Impressum

Zurück...

FileSystemObject im Direktzugriff

Zurück...

(-hg) mailto:hg_fsowrapper@aboutvb.de

Nervt es Sie auch, dass Sie jedes Mal das FileSystemObject aus der MS Scripting Runtime extra instanzieren müssen, um seine Methoden und Eigenschaften aufrufen zu können? Denn eigentlich ist das nicht notwendig, da Sie sich durchaus mit einer einzigen globalen Instanz zufrieden geben können. Aber auch das Anlegen einer globalen Variablen für das FileSystemObject und das mindestens ein einziges Mal notwendige Instanzieren ist eigentlich immer noch zu viel und damit unnötiger Aufwand.

Warum Microsoft das FileSystemObject allerdings nicht gleich als globales Objekt implementiert hat, so dass Sie dessen Methoden und Eigenschaften direkt wie Visual Basic-eigene Funktionen aufrufen könnten, ist ein wenig unverständlich. Selbst unter dem Aspekt, dass die Scripting Runtime ursprünglich rein für Scripting-Zwecke entstanden ist (etwa für IE- oder ASP-Scripting oder zur Verwendung im Windows Scripting Host) und dort tatsächlich eigens instanziert werden muss, hätte dem dennoch nichts im Wege gestanden. Denn auch globale Objekte können jederzeit eigens instanziert werden - sogar parallel zu ihrer globalen Verwendung.

Aber langer Rede kurzer Sinn - hiermit erhalten Sie nun die Klasse FSO, die als Hülle um das FileSystemObjekt gelegt ist und auf Grund der Instancing-Einstellung "6 - GlobalMultiUse" die direkte Verwendung der Methoden und Eigenschaften erlaubt. Sie brauchen lediglich einen Verweis auf die Komponente avbFSOWrapper in Ihre Projekte einbinden (und natürlich trotzdem weiterhin auch den Verweis auf die Scripting Runtime).

Nun rufen Sie die Methoden einfach direkt auf, ohne Angabe eines Objekts - beispielsweise:

Debug.Print FileExists("c:\autoexec.bat")

In der Klasse FSO wird das FleSystemObject selbst als "As New" deklariert

Private mFSO As New FileSystemObject

und wird somit beim ersten Zugriff automatisch instanziert. Es "lebt" dann so lange, wie das aus dieser Klasse instanzierte globale Objekt - auf dessen Lebensdauer haben Sie nämlich auch keinen weiteren Einfluss, nachdem Sie einmal darauf zugegriffen haben. Weiterhin sind lediglich alle Aufrufe durchgeschleift - eine Arbeit, die Sie sicher genau so wie ich im Nullkommanix erledigt hätten, die ich Ihnen aber hiermit erspare. Ein Beispiel für das Durchschleifen:

Public Function FileExists(ByVal FileSpec As String) As Boolean
  FileExists = mFSO.FileExists(FileSpec)
End Function

Und weil das Durchschleifen überall nach diesem Muster abläuft, erspare ich Ihnen daher die Wiedergabe der übrigen Methoden in diesem Text - Sie können ja schließlich auch den Quelltext herunterladen und sich das in Ruhe ansehen.

Doch halt - so ganz stimmt das nicht mit dem einfachen Durchschleifen. Eine Funktion habe ich nämlich ein wenig erweitert: Die Funktion GetTempName kann nunmehr nicht nur einen temporären Dateinamen zurückgeben, sondern gleich den ganzen Pfad für eine temporäre Datei im Temp-Verzeichnis. Im neuen optionalen Parameter können Sie die Wahl treffen, ob der Dateiname mit (Voreingestellt ist True) oder ohne Temp-Pfad zurück gegeben wird.

Public Function GetTempName( _
 Optional ByVal IncludeTempPath As Boolean = True) As String

  Dim nTempFolder As Folder
  
  If IncludeTempPath Then
    With mFSO
      Set nTempFolder = .GetSpecialFolder(TemporaryFolder)
      GetTempName = .BuildPath(nTempFolder.Path, .GetTempName())
    End With
  Else
    GetTempName = mFSO.GetTempName()
  End If
End Function

Sicher, jetzt könnte man auch noch die Funktion GetSpecialFolder zur Lieferung weiterer System-Ordner bewegen (siehe Standard-Ordner finden"Standard-Ordner finden"). Oder das Löschen von Ordnern und Dateien in den Papierkorb ermöglichen (siehe Dateien löschen - Explorer-like"Dateien löschen - Explorer-like" und Die Windows-Müllabfuhr"Die Windows-Müllabfuhr"), oder das Kopieren ganzer Ordner-Strukturen (siehe Ordner-Strukturen kopieren"Ordner-Strukturen kopieren") und dergleichen mehr. Aber diese Erweiterungen einzubauen überlasse ich vorläufig Ihnen - das Rüstzeug finden Sie ja bereits in den angegebenen Artikeln...


Projekt und ActiveX-DLL avbFSOWrapper (fsowrapper.zip - ca. 9,6 KB)

ActiveX-DLL als Setup (ohne VB 6-Runtime!) (fsowrappersetup.zip - ca. 242 KB)



Komponenten-Übersicht

Schnellsuche



Zum Seitenanfang

Copyright © 1999 - 2023 Harald M. Genauck, ip-pro gmbh  /  Impressum

Zum Seitenanfang

Zurück...

Zurück...