Benutzer-Werkzeuge

Webseiten-Werkzeuge


filesystemobject

Dies ist eine alte Version des Dokuments!


FileSystemObject | Definieren | Zerstören | Pfadfunktionen | Laufwerksfunktionen | Verzeichnisfunktionen | Dateifunktionen

FileSystemObject

Eins der wichtigsten Objekte für Skripte. Es ist das Standardobjekt in fast jedem Skript. Daher wird der Zugriff meist aus Performance-Gründen global definiert.
Hilfreiche Zusammenstellung von Skriptbeispielen: http://www.oc-s.com/tutorials/WSH/filesystemobject.htm

Definieren

VBScript:
Dim fso Set fso = CreateObject("Scripting.FileSystemObject") JScript:
var fso = new ActiveXObject("Scripting.FileSystemObject");

Zerstören

Es empfiehlt sich Objekte bei Beendigung frei zu geben. Da es meist global definiert wird, sollte gewährleistet sein, dass bei Programmbeendigung das Objekt frei gegeben wird. Beispiel siehe: Scriptgerüst (VBScript)
VBScript:
Set fso = Nothing

Pfadfunktionen

Laufwerk bestimmen

VBScript:
sDrive = fso.GetDriveName(sFullPath)

Verzeichnis extrahieren

VBScript:
sDir = fso.GetParentFolderName(sFullPath)

Dateiname extrahieren

Ermittelt Dateinamen mit Dateiendung
VBScript:
sFileName = fso.GetFileName(sFullPath)

Basisnamen extrahieren

Ermittelt Dateinamen, jedoch ohne Dateityp
VBScript:
sBaseName = fso.GetBaseName(sFullPath)

Erweiterung extrahieren

Ermittelt Dateiendung/-typ
VBScript:
sExt = fso.GetExtensionName(sFullPath)

Pfade kombinieren

Setzt zwei Teilpfade zu einem kompletten Pfad zusammen
VBScript:
sResultPath = fso.BuildPath(sDir, sFileName)

Absoluten Pfad ermitteln

Wird benötigt um einen absoluten Pfad zu konsolidieren. Zu weiteren Handhabung siehe die VBScript-Hilfe
VBScript:
sGuiltyPath = fso.GetAbsolutePathName(sAskPath)

Temp-Verzeichnis ermitteln

Wird oft benötigt: Das temporäre Computerverzeichnis
sTempPath = fso.GetSpecialFolder(2)

Laufwerksfunktionen

Hiermit kann ermittelt werden, welche Laufwerke es gibt, ob ein Laufwerk verfügbar ist, freien Speicherplatz etc. Hier kann nur ein grober Abriss der Möglichkeiten aufgezeigt werden. Siehe Drive-Objekt in der WSH-Hilfe

Laufwerksobjekt erstellen

VBScript:
Set oDrive = fso.GetDrive(fso.GetDriveName(sFullPath))

Verfügbare Laufwerke ermittelt

(Laufwerke, die nicht bereit sind, werden nicht aufgeführt)
VBScript:
'Liefert aktuell verfügbare(!) Laufwerke Public Function ListReadyDrives Dim oFS Dim oDrives Dim oDrive

Dim sResult

'Objekte holen Set oFS = CreateObject("Scripting.FileSystemObject") Set oDrives = fso.Drives

For Each oDrive in dc If oDrive.IsReady Then sResult = sResult & ";" & oDrive.DriveLetter & ": (" & DriveType(oDrive) & ")" Next Set oDrives = Nothing Set oFS = Nothing

ListReadyDrives = Split(Mid(sResult, 2), ";") End Function

'Liefert einen Laufwerkstyp als Klartext Public Function DriveType(ByVal oDrive) Select Case oDrive.DriveType Case 0 DriveType = "Unbekannt" Case 1 DriveType = "Wechseldatenträger" Case 2 DriveType = "Festplatte" Case 3 DriveType = "Netzwerk" Case 4 DriveType = "CD/DVD-ROM" Case 5 DriveType = "RAM-Laufwerk" Case Else DriveType = "Unbekannter Typ" End Select End Function

Laufwerksbereitschaft ermitteln

VBScript:
Set oDrive = fso.GetDrive(fso.GetDriveName(sFullPath)) If oDrive.IsReady Then '…

End If Set oDrive = Nothing

Freien Speicherplatz ermitteln

VBScript:
'… Dim oDrive Set oDrive = fso.GetDrive(fso.GetDriveName(sFullPath)) MsgBox FormatBytes(oDrive.FreeSpace) & vbCRLF & FormatBytes(oDrive.AvailableSpace)

'Formatiert Größe von Bytes in lesbare Form mit Vorsätzen Function FormatBytes(ByVal Value) Dim sBenennung

If IsNumeric(Value) Then sBenennung = " B" If Value >= 1024 Then Value = Value / 1024 sBenennung = " KB" End If If Value >= 1024 Then Value = Value / 1024 sBenennung = " MB" End If If Value >= 1024 Then Value = Value / 1024 sBenennung = " GB" End If FormatBytes = FormatNumber(Value, 2, -1) & sBenennung Else FormatBytes = "Formatierung nicht möglich!" End If End Function

Verzeichnisfunktionen

Eines der Hauptfunktionen ist: Ist ein Verzeichnis vorhanden
If fso.FolderExists(sFolderPath) Then

  'Code, wenn Verzeichnis da ist
  '...

Else

  MsgBox "Verzeichnis fehlt!", vbExclamation

End If

Folder-Objekt

Das Folder-Objekt liefert die verschiedensten Verzeichniseigenschaften und Methoden. Man kann damit Verzeichnis-Attribute, Zeiteigenschaften, Pfadeigenschaften lesen und schreiben. Oder man kann Unterverzeichnisse oder im Verzeichnis enthaltene Dateien ermitteln, das angesprochene Verzeichnis kopieren, löschen oder verschieben. Hier sollen nur einige wesentliche Eigenschaften oder Methoden aufgeführt werden, um die enorme Leistungsfähigkeit zu zeigen. Für die umfangreiche Hilfe siehe die WSH-Scripthilfe. Die folgenden Beispiele beruhen auf dem Folder-Objekt.

Definieren

VBScript:
Dim oFolder Set oFolder = fso.GetFolder(sFolderPath)

Zerstören

VBScript:
Set oFolder = Nothing

Erzeugen

VBScript:
if not fso.FolderExists(sFolderPath) then

  fso.CreateFolder(sFolderPath)

end if Es kann nur ein Ordner angelegt werden, dessen übergeordnete Ordner bereits vorhanden ist. Sonst erfolgt eine Fehlermeldung.

Ermittlung aller Unterordner in einem Ordner

VBScript:
Set ofolders = fso.getfolder(C:\test") Set osubfolder = ofolders.Subfolders For Each VerzX in osubfolder

  Msgbox VerzX.Name

Next set osubfolder = nothing set ofolders = nothing

Rekursives Einlesen von Dateien mit Filterkriterien, optional inkl. Unterverzeichnisse

VBScript:
'Stand: 27.01.2011 Option Explicit

Main

Sub Main MsgBox Join(ReadAllFiles(FF_EnterPath(False, "Verzeichnis auswählen"), ".jpg;.tif;.png;.bmp;*.jp2", True), vbCRLF) End Sub

'Liest alle Dateien ein, die den Kriterien entsprechen 'Parameter: 'sPath: Vollständiger Ursprungspfad 'sFilter: Dateifilter. Zugelassene Filterzeichen: "*". Mehrere Filter werden mit Semikolon ";" getrennt 'bRecursive: True = Durchsucht auch Unterverzeichnisse Public Function ReadAllFiles(sPath, sFilter, bRecursive) Dim oFolderClass Set oFolderClass = New clsFolder With oFolderClass .FileFilter = sFilter ReadAllFiles = .GetFiles(sPath, bRecursive) End With Set oFolderClass = Nothing End Function

':::::::::::::::::::::::::::::::::::::::::: Class clsFolder ':::::::::::::::::::::::::::::::::::::::::: Private mv_fso Private mv_Filter Public FileTypes

Private Sub Class_Initialize() Set mv_fso = CreateObject("Scripting.FileSystemObject") mv_Filter = Array(".") End Sub Private Sub Class_Terminate() Set mv_fso = Nothing Erase mv_Filter End Sub

' Eigenschaft: Filter ' Zulässige Filterzeichen: * ' Mehrere Definitionen werden mit Semikolon ";" getrennt Public Property Let FileFilter(ByVal sValue) Dim i

If Len(sValue) = 0 Then mv_Filter = Array(".") Else mv_Filter = Split(Trim(sValue), ";") For i = 0 To UBound(mv_Filter, 1) mv_Filter(i) = Trim(mv_Filter(i)) Next End If End Property Public Property Get FileFilter() FileFilter = Join(mv_Filter, ";") End Property

'Testet Dateinamen, ob sie dem Dateifilter entsprechen Public Function TestFilter(sFilePath) Dim sName Dim aSplit Dim i Dim lUBound Dim lPos Dim sFilter

Dim bStartFilter

TestFilter = False

sName = mv_fso.GetFileName(sFilePath)

For Each sFilter In mv_Filter If Len(sFilter) > 0 Then aSplit = Split(sFilter, "*") lUBound = UBound(aSplit, 1) lPos = 1 For i = 0 To lUBound Select Case True Case CBool1) = 0)) Case CBool2) = 0)) TestFilter = True Exit Function Case Len(aSplit(i)) = 0 Case Else lPos = InStr(lPos, sName, aSplit(i), vbTextCompare) If CBool3) Then Exit For If lPos = 0 Then Exit For

lPos = lPos + Len(aSplit(i)) End Select Next If lPos >= Len(sName) Then TestFilter = True Exit Function End If End If Next End Function

' Holt alle Dateien aus dem angegebenen Verzeichnis ' Parameter: ' sPath: Vollständiger Verzeichnispfad ' bRecursive: Gibt an, dass auch Unterverzeichnisse des Pfades durchsucht werden sollen Public Function GetFiles(ByVal sPath, ByVal bRecursive) Dim aFiles aFiles = Array() If Not mv_fso.FolderExists(sPath) Then GetFiles = aFiles Exit Function End If

RecGetFiles sPath, bRecursive, aFiles

GetFiles = aFiles End Function

'Hilfsmethode zur rekursiven Durchsuchung Private Sub RecGetFiles(ByRef sPath, ByVal bRecursive, ByRef aFiles) Dim oFolder Dim oSubFolder Dim oFile Set oFolder = mv_fso.GetFolder(sPath)

For Each oFile in oFolder.Files If TestFilter(oFile.Path) Then ReDim Preserve aFiles(UBound(aFiles, 1) + 1) aFiles(UBound(aFiles, 1)) = oFile.Path End If Next If bRecursive Then For Each oSubFolder in oFolder.SubFolders RecGetFiles oSubFolder.Path, bRecursive, aFiles Next End If End Sub

':::::::::::::::::::::::::::::::::::::::::: End Class '::::::::::::::::::::::::::::::::::::::::::

Dateifunktionen

Das wichtigste überhaupt ist; festzustellen, ob eine Datei vorhanden ist:
If fso.FileExists(sFile) Then

  'Code, wenn Datei da ist
  '...

Else

  MsgBox "Datei fehlt!", vbExclamation

End If

File-Objekt

Das File-Objekt liefert die verschiedensten Dateieigenschaften und Methoden. Man kann damit Datei-Attribute, Zeiteigenschaften, Pfadeigenschaften lesen und schreiben. Es ist auch eine Möglicheit Dateien zu verschieben, kopieren oder zu löschen. Für die umfangreiche Hilfe siehe die WSH-Scripthilfe. Die folgenden Beispiele beruhen auf dem File-Objekt.

Definieren

VBScript:
Dim oFile Set oFile = fso.GetFile(sFileFullPath)

Zerstören

VBScript:
Set oFile = Nothing

Dateigröße ermitteln:

VBScript:
Option Explicit

Dim fso

Main

Set fso = Nothing

Sub Main

  Dim oFile
  Dim sFile
  If FF_GetImageCount = 0 Then Exit Sub
  Set fso = CreateObject("Scripting.FileSystemObject")
  sFile = FF_GetImageName(0)
  Set oFile = fso.GetFile(sFile)
  MsgBox sFile & ": " & oFile.Size & " Bytes"
  Set oFile = Nothing

End Sub

Dateiattribute lesen/setzen:

Dieses Beispiel löscht die Attribute "ReadOnly" und "Hidden" und setzt das Attribute "Archive", damit es vom Backup erneut erfasst wird.
VBScript:
'Attribute

Option Explicit

Dim fso

'0=Normal Normale Datei. Es sind keine Attribute gesetzt. '1=ReadOnly Schreibgeschützte Datei. Für das Attribut gilt Lesen/Schreiben. '2=Hidden Versteckte Datei. Für das Attribut gilt Lesen/Schreiben. '4=System Systemdatei. Für das Attribut gilt Lesen/Schreiben. '8=Volume Datenträgerbezeichnung eines Laufwerkes. Das Attribut ist schreibgeschützt. '16=Directory Ordner oder Verzeichnis. Das Attribut ist schreibgeschützt. '32=Archive Datei hat sich nach der letzten Sicherung geändert. Für das Attribut gilt Lesen/Schreiben. '64=Alias Verknüpfung oder Shortcut. Das Attribut ist schreibgeschützt. '128=Compressed Komprimierte Datei. Das Attribut ist schreibgeschützt.

Main

Set fso = Nothing

Sub Main

  Dim sFile
  Dim oFile
  Dim lAttributes
  sFile = FF_GetImageName(0)
  If Len(sFile) = 0 Then Exit Sub
  Set fso = CreateObject("Scripting.FileSystemObject")
  Set oFile = fso.GetFile(sFile)
  lAttributes = oFile.Attributes
  'ReadOnly löschen
  lAttributes = (Not (Not lAttributes Or 1))
  'Hidden löschen
  lAttributes = (Not (Not lAttributes Or 2))
  'Archive setzen
  lAttributes = lAttributes Or 32
  oFile.Attributes = lAttributes
  Set oFile = Nothing

End Sub

Prüfen, ob Datei existiert

VBScript:
Function FileExists(ByVal uFileName)

  Dim fso
  Set fso = CreateObject("Scripting.FileSystemObject")
  FileExists = fso.FileExists(uFileName)
  Set fso = Nothing

End Function

Letzten Schreibzugriff ermitteln

Manchmal ist es nötig zu ermitteln, wann eine Datei das letztemal geschrieben wurde. Das ist z. B. bei Kopiervorgängen wichtig, um festzustellen, welche Datei neuer ist.
VBScript:
Option Explicit

Dim fso

Main

Set fso = Nothing

Sub Main

  Dim oFile
  Dim sFile
  If FF_GetImageCount = 0 Then Exit Sub
  Set fso = CreateObject("Scripting.FileSystemObject")
  sFile = FF_GetImageName(0)
  Set oFile = fso.GetFile(sFile)
  MsgBox "Letzte Änderung von """ & sFile & """: " & oFile.DateLastModified
  Set oFile = Nothing

End Sub

1)
i = 0) And (Len(aSplit(0
2)
i = lUBound) And (Len(aSplit(lUBound
3)
i = 0) And (lPos <> 1
filesystemobject.1475942324.txt.gz · Zuletzt geändert: (Externe Bearbeitung)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki