WaBis

walter.bislins.ch

FS: CFileSystem API

Alle Funktionen des FS-Moduls werden über das globale FS-Objekt vom Typ CFileSystem und das globale FSDir-Objekt vom Typ CFileSystemDirectories abgewickelt. Hier wird das FS-Objekt beschrieben.

Absolute und virtuelle Pfade

Absolute Pfade sind Pfade im DOS-Format wie sie von der Funktion MapPath zurück gegeben werden:

C:\root\webs

Virtuelle Pfade sind realtive oder absolute Pfade, die sich auf das Basis-Verzeichnis der Web-Anwendung beziehen. Virtuelle Pfade können als Pfad-Separator-Zeichen sowohl \ als auch / enthalten. Virtuelle Pfade enthalten nie einen Laufwerk-Bezeichner (z.B: C:\):

/root/webs
webs/stuff

Die Funktion MapPath liefert zu einem virtuellen Pfad den zugehörigen absoluten Pfad. Die Funktionen des FS-Objektes akzeptieren virtuelle und absolute Pfade. Intern werden virtuelle Pfade automatisch in absolute Pfade gewandelt bevor auf das File-System zugegriffen wird.

Cache-Mechanismus

Das FS-Modul merkt sich den Zustand (Ordner existiert oder nicht) jedes abgefragten Ordners in einem Cache. Bei einer erneuten Abfrage eines bereits abgefragten Ordners wird der im Cache gespeicherte Zustand zurück gegeben, wodurch keine langsame Datei-Operation des Betriebssystem gerufen wird.

Damit der Cache-Mechanismus nicht hintergangen wird, müssen alle Ordner mit Funktionen des FS-Moduls erzeugt und gelöscht werden!

Funktionen die den Cache verwenden:

CFileSystem

class CFileSystem
  FileFormat
  FSO
   :
end class
FileFormat: int = 0
0 = ASCII; -1 = Unicode; -2 = System Settings
FSO: read only Scripting.FileSystemObject

Die Klasse CFileSystem kapselt alle File-System Funktionen und Eigenschaften. Beim Includen von fs.inc wird das globale FS-Objekt dieser Klasse angelegt, über welches auf die Funktionen und Properties zugegriffen werden kann. Das FS Objekt verwaltet intern ein Scripting.FileSystemObject über welches man per FSO-Property zugreifen kann.

FS-Objekt

FS.FunctionOrProperty
FS: global CFileSystem

Über das globale Objekt FS kann auf das Filessystem zugegriffen werden. Im Gegensatz zum Scripting.FileSystemObject können sowohl virtuelle als auch absolute Pfade verwendet werden und es werden Unix (\) und DOS (/) Pfadbegrenzerzeichen unterstützt. Einige Funktionen des FS-Objektes sind auf Geschwindigkeit optimiert und verwenden einen Cache. Intern verwaltet das FS-Objekt ein Scripting.FileSystemObject für alle FS-Funktionen. Auf dieses interne Objekt kann über das FSO-Property zugegriffen werden.

FileFormat-Property

FS.FileFormat = myFormat
myFormat = FS.FileFormat
FS: CFileSystem
FileFormat: int = 0
0 = ASCII; -1 = Unicode; -2 = System Settings

Steuert das File-Format (ASCII, Unicode) bei den folgenden Funktionen:

FSO-Property

set myFSO = FS.FSO
FS: CFileSystem
FSO: read only Scripting.FileSystemObject

Ermöglicht den Zugriff auf das vom FS-Objekt verwaltete FileSystemObject, einer von VBScript zur Verfügung gestellten System-Klasse.

MapPath

myAbsPath = FS.MapPath( aPath )
FS: CFileSystem
aPath: string
Ein virtueller Pfad, "." oder ""
Return: string
Absoluter Pfad zu aPath (z.B: "C:\root\webs")

Berechnet den absoluten Pfad zum Ordner aPath. Wenn der absolute Pfad zum aktuellen Verzeichnis abgefragt werden soll, kann aPath = "." oder aPath = "" übergeben werden. Wenn aPath bereits ein absoluter Pfad ist, wird dieser unverändert zurück gegeben.

Implementation: Für das Berechnen des absoluten Pfades wird die Systemfunktion Server.MapPath() gerufen. Wenn der Pfad ungültig ist, wird ein Exception gesetzt.

Optimierung: Diese Funktion merkt sich den letzten Aufruf. Wenn derselbe Pfad mehrmals hintereinander abgefragt wird, wird das letzte Resultat zurückgegeben und der Aufruf von Server.MapPath() gespart.

Wenn aPath ungültige Zeichen enthält wird ein Exception gesetzt.

AppendSlash

myPath = FS.AppendSlash( aPath )
FS: CFileSystem
aPath: string
Ein virtueller oder absoluter Pfad
Return: string
aPath mit abschliessendem /

Hängt einen Pfadseparator (/) an aPath, wenn noch keiner vorhanden ist.

AppendName

myPath = FS.AppendName( aPath, aName )
FS: CFileSystem
aPath: string
Ein virtueller oder absoluter Pfad
aName: string
Ein Filename oder ein relativer Pfad
Return: string
aPath plus aName getrennt durch einen /

Hängt aName an aPath, getrennt durch einem Pfadseparator (/) und gibt das Resultat zurück.

AppendNameN

myPath = FS.AppendNameN( aPath, aName )
FS: CFileSystem
aPath: string
Ein virtueller oder absoluter Pfad
aName: string
Ein Filename oder ein relativer Pfad
Return: string
aPath plus aName getrennt durch einen / in Normalform

Hängt aName an aPath, getrennt durch einem Pfadseparator (/). Der resultierende Pfad wird zusätzlich Normalisiert mit der Funktion NormalizePath.

Siehe auch:

aPath = "C:/root/temp"
aName  = "../home"
myPath = FS.AppendNameN( aPath, aName )
' myPath -> "C:/root/home"

SplitPath

FS.SplitPath aPath, aPathRet, aFilenameRet
FS: CFileSystem
aPath: string
Ein Pfad mit Dateiname
aPathRet: byRef string
aPath ohne Dateiname
aFilenameRet: byRef string
Dateiname von aPath

Trennt einen Pfad in Verzeichnis-Pfad und Filenamen auf. Wenn in aPath kein Dateiname vorkommt, wird aPathRet = aPath gesetzt und aFilenameRet = "".

aPath = "C:\root\sub\file.txt"
FS.SplitPath aPath, aPathRet, aFilenameRet
' aPathRet     -> "C:\root\sub\"
' aFilenameRet -> "file.txt"

GetFileName

filename = FS.GetFileName( aPath )
FS: CFileSystem
aPath: string
Ein Pfad mit Filename
Return: string
Filename plus Extension aus aPath

Extrahiert aus aPath den Filenamen plus Extension. Der Pfad darf als Separator sowohl \ als auch / enthalten.

Wenn in aPath kein Separator-Zeichen enthalten ist, wird aPath zurück gegeben.

aPath = "C:\root\home\bild.jpg"
filename = FS.GetFileName( aPath )
' filename -> "bild.jpg"

GetBaseName

filename = FS.GetBaseName( aPath )
FS: CFileSystem
aPath: string
Ein Pfad mit Filename
Return: string
Filename ohne Extension aus aPath

Extrahiert aus aPath den Filenamen ohne Extension. Der Pfad darf als Separator sowohl \ als auch / enthalten. Als Extension wird alles nach dem letzten Punkt interpretiert, inklusive Punkt.

aPath = "C:\root\home\bild.jpg"
filename = FS.GetBaseName( aPath )
' filename -> "bild"

aPath = "images/bild.v1.5.jpg"
filename = FS.GetBaseName( aPath )
' filename -> "bild.v1.5"

GetExtension

extension = FS.GetExtension( aPath )
FS: CFileSystem
aPath: string
Ein Pfad mit Filename
Return: string
Extension des Files in aPath

Extrahiert aus aPath die Extension inklusive Punkt. Als Extension wird alles nach dem letzten Punkt interpretiert, inklusive Punkt.

aPath = "C:\root\home\bild.jpg"
ext = FS.GetExtension( aPath )
' ext -> ".jpg"

aPath = "bild.v1.5.jpg"
ext = FS.GetExtension( aPath )
' ext -> ".jpg"

GetPathRelativeToRoot

path = FS.GetPathRelativeToRoot( aAbsPath, aRelRootPath )
FS: CFileSystem
aAbsPath: string
Ein absoluter Pfad zu einem Verzeichnis A
aRelRootPath: string
Ein relativer Pfad zu einem Verzeichnis V in aAbsPath
Return: string
Relativer Pfad vom Verzeichnis V zum Verzeichnis A

Berechnet den relativen Pfad von einem Verzeichnis V (im Beispiel wabis), welches in aAbsPath enthalten ist, zum Verzeichnis aAbsPath (im Beispiel test). Das Verzeichnis V wird als relativer Pfad in aRelRootPath angegeben.

aAbsPath = "C:\usr\wabis\wikis\test"
aRelRootPath = "../../"
path = FS.GetPathRelativeToRoot( aAbsPath, aRelRootPath )
' path -> "wikis/test"

GetCurrentPathRelativeToRoot

path = FS.GetCurrentPathRelativeToRoot( aRelRootPath )
FS: CFileSystem
aRelRootPath: string
Ein relativer Pfad zu einem Verzeichnis V im aktuellen Pfad
Return: string
Relativer Pfad vom Verzeichnis V zum aktuellen Pfad

Berechnet den relativen Pfad von einem Verzeichnis V (im Beispiel wabis), welches in aktuellen Verzeichnis der Web-Anwendung enthalten ist, zum aktuellen Verzeichnis (im Beispiel test). Das Verzeichnis V wird als relativer Pfad in aRelRootPath angegeben.

appliPath = FS.MapPath(".")
' appliPath -> "C:\usr\wabis\wikis\test"
aRelRootPath = "../../"
path = FS.GetCurrentPathRelativeToRoot( aRelRootPath )
' path -> "wikis/test"

NormalizePath

normPath = FS.NormalizePath( aPath )
FS: CFileSystem
aPath: string
Ein virtueller Pfad
Return: string
Ein normalisierter Pfad

Entfernt bzw. fasst "../" und "/./" Teile zusammen.

aPath = "test/images/.././css"
normPath = FS.NormalizePath( aPath )
' normPath -> "test/css"

GetFolder

set myFolder = FS.GetFolder( aPath )
FS: CFileSystem
aPath: string
Absoluter oder virtueller Pfad
Return: Folder
Folder Objekt des FileSystemObjektes FS.FSO
Rrequire: FolderExists(aPath)

FolderExists

if FS.FolderExists( aPath ) then
FS: CFileSystem
aPath: string
Absoluter oder virtueller Pfad
Return: bool
true, wenn das Verzeichnis aPath existiert

Test, ob das Verzeichnis aPath existiert.

Optimierung: Das FS-Modul merkt sich den Zustand jedes abgefragten Ordners in einem Cache. Bei einer erneuten Abfrage eines bereits abgefragten Ordners wird der im Cache gespeicherte Zustand zurück gegeben, wodurch keine langsame Datei-Operation des Betriebssystem gerufen wird.

Damit der Cache-Mechanismus nicht hintergangen wird, müssen alle Ordner mit Funktionen des FS-Moduls erzeugt und gelöscht werden!

myPath = "../images"
if FS.FolderExists( myPath ) then
  set myFolder = FS.GetFolder( myPath )
    :
else
    :
end if

CreateFolder

FS.CreateFolder aPath
FS: CFileSystem
aPath: string
Ein virtueller oder absoluter Pfad

Erzeugt einen neuen Ordner aPath, sofern er nicht bereits existiert.

Implementation: Zunächst wird für aPath der absolute Pfad A mittels MapPath ermittelt. Dann wird der absolute Pfad zerlegt in den Namen des neuen Ordners N und den Pfad zum Verzeichnis V, in welchem der Ordner N angelegt werden soll. Dann wird im Verzeichnis V der Ordner N erzeugt.

Wenn das Verzeichnis V nicht existiert oder das Erzeugen des neuen Ordners N nicht erfolgreich ist, wird ein Exception gesetzt.

Optimierung: Damit der Cache-Mechanismus nicht hintergangen wird, müssen alle Ordner mit Funktionen des FS-Moduls erzeugt und gelöscht werden!

Beispiel 1

newFolderName = "temp"
myPath = "../images"
aPath = FS.AppendName( myPath, newFolderName )
' aPath -> "../images/temp"
FS.CreateFolder aPath

Erzeugt im Ordner images, der sich eine Stufe über dem aktuellen Verzeichnis befindet, einen neuen Ordner mit Name temp.

Beispiel 2

newFolderName = "temp/thumb"
myPath = "../images"
aPath = FS.AppendName( myPath, newFolderName )
' aPath -> "../images/temp/thumb"
FS.CreateFolder aPath
' -> Excpetion

Angenommen, das Verzeichnis images existiert, das Verzeichnis temp jedoch noch nicht. Dann wird im obigen Beispiel ein Exception gesetzt, weil zum Erzeugen des Ordners thumb das Verzeichnis temp bereits existieren muss! Man kann also mit CreateFolder nicht eine ganze Hierarchie von Ordnern mit einem Aufruf erzeugen!

DeleteFolder

FS.DeleteFolder aPath
FS: CFileSystem
aPath: string
Ein virtueller oder absoluter Pfad

Löscht den Ordner aPath und alle darin enthaltenen Unter-Ordner und Dateien, sofern der Ordner aPath existiert.

Wenn ein zu löschender Ordner oder eine zu löschende Datei von einem anderen Programm geöffnet ist, wird ein Exception gesetzt. Einige Unter-Ordner oder Dateien können in diesem Fall gelöscht worden sein.

Wenn kein Ordner aPath existiert, macht diese Funktion nichts. Ob ein Ordner existiert oder nicht, kann mit der Funktion FolderExists ermittelt werden.

Optimierung: Damit der Cache-Mechanismus nicht hintergangen wird, müssen alle Ordner mit Funktionen des FS-Moduls erzeugt und gelöscht werden!

ListFiles

myFilesList = FS.ListFiles( aPath )
FS: CFileSystem
aPath: string
Ein virtueller oder absoluter Pfad zu einem Ordner
Return: array of string
Liste mit den Namen der Dateien des Ordner aPath
Require: FolderExists(aPath)

In die Liste myFilesList werden nur die Namen der Dateien aufgenommen, die sich unmittelbar im Ordner aPath befinden. Es werden keine Dateinamen von Unter-Ordnern aufgenommen. In myFilesList werden auch keine Namen von Unter-Ordnern aufgenommen.

Die Funktion setzt voraus, dass der Ordner aPath existiert.

GetFile

set myFile = FS.GetFile( aPath )
FS: CFileSystem
aPath: string
Ein virtueller oder absoluter Pfad zu einer Datei
Return: File
VBScript File System-Objekt
Require: FileExists(aPath)

Gibt ein File System-Objekt für die Datei aPath zurück. Über das File Objekt können Eigenschaften der Datei wie Filename, Erzeugungsdatum, Datum der letzten Änderung usw. abgefragt und geändert werden.

aPath = "../images/logo.png"
if FS.FileExists( aPath ) then
  set myFile = FS.GetFile( aPath )
  myFileSize = myFile.Size
else
  myFileSize = 0
end if

FileExists

if FS.FileExists( aPath ) then
FS: CFileSystem
aPath: string
Ein virtueller oder absoluter Pfad zu einer Datei
Return: bool
true, wenn die Datei aPath existiert

Optimierung: Das FS-Modul merkt sich den Zustand ob die Datei existiert oder nicht in einem Cache. Wird diese Funktion mehrmals hintereinander mit dem selben aPath aufgerufen, so wird der Zustand des Cache zurück gegegeben, wodurch langsame Aufrufe von Betriebssystemfunktionen vermieden werden.

Damit der Cache-Mechanismus nicht hintergangen wird, müssen zum Erzeugen, Löschen, Verschieben und Umbenennen von Dateien die FS-Funktionen verwendet werden!

ReadFile

text = FS.ReadFile( aPath )
FS: CFileSystem
aPath: string
Ein virtueller oder absoluter Pfad zu einer Textdatei
Return: string
Inhalt der Textdatei
Require: FileExists(aPath)

Liest den Inhalt der Textdatei aPath ein. Es wird vorausgesetzt, dass die Datei existiert. Wenn die Datei nicht geöffnet werden kann, wird ein Exception gesetzt.

Wenn die Datei leer ist, wird ein Leerstring zurück gegeben.

In welchem Format der Text in der Datei interpretiert wird, kann mit dem FileFormat-Property eingestellt werden.

myPath = "index.html"
if FS.FileExists(myPath) then
  text = FS.ReadFile( myPath )
else
  text = ""
end if

WriteFile

FS.WriteFile aPath, aText
FS: CFileSystem
aPath: string
Ein virtueller oder absoluter Pfad für eine Textdatei
aText: string
Text, welcher in der Datei gespeichert werden soll

Erzeugt eine Text-Datei aPath und speichert aText darin. Wenn die Datei bereits existiert, wird ihr Inhalt mit aText überschrieben.

In welchem Text-Format der Text gespeichert werden soll kann mit dem FileFormat-Property eingestellt werden.

Wenn ein Verzeichnis in aPath nicht existiert oder die Datei nicht erzeugt oder geöffnet werden kann, wird ein Exception gesetzt.

myText = "..."
myFilename = "test.txt"
FS.WriteFile myFilename, myText

OpenFileForWriting

set myTextStream = FS.OpenFileForWriting( aPath )
FS: CFileSystem
aPath: string
Ein virtueller oder absoluter Pfad für eine Textdatei
Return: TextStream
VBScript TextStream System-Objekt

Erzeugt oder öffnet eine Datei aPath für das Speicher von Text. Wenn die Datei bereits existiert, wird ihr Inhalt gelöscht. Für das Speichern kann die TextStream-Funktion Write (wiederholt) verwendet werden. Am Ende muss die Datei mit der TextStream-Funktion Close geschlossen werden (siehe Anwedung).

In welchem Text-Format der Text gespeichert werden soll kann mit dem FileFormat-Property eingestellt werden.

Wenn ein Verzeichnis in aPath nicht existiert oder die Datei nicht erzeugt oder geöffnet werden kann, wird ein Exception gesetzt.

Anwendung

aPath = "test.txt"
set myTextStream = FS.OpenFileForWriting( aPath )
myTextStream.Write "Zeile 1" & vbCRLF
myTextStream.Write "Zeile 2" & vbCRLF
  :
myTextStream.Close

DeleteFile

FS.DeleteFile aPath
FS: CFileSystem
aPath: string
Ein virtueller oder absoluter Pfad zu einer Datei

Wenn die Datei existiert, wird sie gelöscht. Wenn die Datei von einer anderen Anwendung geöffnet ist oder nicht gelöscht werden kann, wird ein Exception gesetzt. Wenn die Datei nicht existiert, wird nichts ausgeführt.

Ob eine Datei existiert oder nicht kann mit der Funktion FileExists ermittelt werden.

CopyFile

FS.CopyFile aSrcPath, aDestPath
FS: CFileSystem
aSrcPath: string
Ein virtueller oder absoluter Pfad zu der Quell-Datei
aDestPath: string
Ein virtueller oder absoluter Pfad zur Ziel-Datei

Wenn die Datei aSrcPath existiert, wird sie zu aDestPath kopiert. Wenn die Datei aSrcPath nicht existiert, wird nichts ausgeführt. Wenn bereits eine Datei aDestPath existiert, wird sie überschrieben.

In aDestPath muss ein Dateiname für die Ziel-Datei angegeben werden. Es reicht nicht, wenn nur das Ziel-Verzeichnis angegeben wird!

Wenn die Ziel-Datei nicht erzeugt oder überschrieben werden kann, wird ein Exception gesetzt.

mySrcPath = "text.txt"
myDestPath = "backup/text.txt"
FS.CopyFile mySrcPath, myDestPath

MoveFile

FS.MoveFile aSrcPath, aDestPath
FS: CFileSystem
aSrcPath: string
Ein virtueller oder absoluter Pfad zu der Quell-Datei
aDestPath: string
Ein virtueller oder absoluter Pfad für die Ziel-Datei

Wenn die Datei aSrcPath existiert, wird sie zu aDestPath verschoben und oder umbenannt. Wenn die Datei aSrcPath nicht existiert, wird nichts ausgeführt. Wenn bereits eine Datei aDestPath existiert, wird diese überschrieben.

In aDestPath muss ein Dateiname für die Ziel-Datei angegeben werden. Es reicht nicht, wenn nur das Ziel-Verzeichnis angegeben wird!

Wenn die Ziel-Datei nicht erzeugt oder überschrieben werden kann, wird ein Exception gesetzt.

mySrcPath = "text.txt"
myDestPath = "trash/text.txt"
FS.MoveFile mySrcPath, myDestPath

DateLastModified

myDate = FS.DateLastModified( aPath )
FS: CFileSystem
aPath: string
Ein virtueller oder absoluter Pfad
Return: date
Datum der letzten Änderung der Datei aPath
Require: FileExists(aPath)

Gibt das Datum der letzten Änderung der Datei aPath zurück.

Es wird vorausgesetzt, dass die Datei aPath existiert. Ob eine Datei existiert oder nicht kann mit der Funktion FileExists ermittelt werden.

Weitere Infos zur Seite
Erzeugt Dienstag, 31. Januar 2012
von wabis
Zum Seitenanfang
Geändert Samstag, 18. Juli 2015
von wabis