| Der weltgrößte Software-Konzern ist sehr bemüht, einmal eingeführte Regeln und Produkte möglichst nicht abzuschaffen. Deshalb wird die Kluft zwischen überholten und modernen Methoden ständig größer, ebenso wie der enorme Aufwand zu ihrer Überbrückung. Wegen der erdrückenden Markt-Position halten das die Kunden allerdings für normal. | Ein Beispiel ist der Begriff Volume (Laufwerk). Während das Speicher-Volume einer Datei für gewöhnliche Linux-AnwenderInnen unwichtig und unbekannt ist, spielt der "Laufwerks-Buchstabe" in Windows-Software und im täglichen Umgang von Windows-AnwenderInnen noch immer eine wichtige Rolle ... |
VBA
|
Visual Basic for Applications - Dateisystem |
| Volumes | Volumes (Drives) - Festplatten, CD/DVD. Netzlaufwerke, ... |
| Konsolen-Befehle | Befehle und Programme zur Volume-Verwaltung |
| ActiveX | Volume-Verwaltung mit VBA (Javascript, ...) |
| DLL | Volume-Verwaltung mit Teilen von Programm-Bibliotheken |
| ChDrive | Volume des aktuellen Pfades wechseln |
Volumes |
|
LaufwerkeVolumes sind logische Einheiten, die an physikalische Einheiten ('Laufwerke') gebunden sein können. |
Die meisten Datei-Systeme verwenden den Begriff "Volume". Nur auf M$ Systemen hat er jedoch eine wichtige Bedeutung. |
FestplatteIm einfachsten Fall wird eine Festplatte als Einheit formatiert und steht im Dateisystem als "Drive" zur Verfügung. |
DVD / CDDrives für solche Datenträger verhalten sich ähnlich wie Festplatten, jedoch mit auswechselbarem (removeable) Inhalt. |
PartitionierungEin Laufwerk (Festplatte, CD, ...) kann in mehrere logische Einheiten (Partitionen) unterteilt werden. Das war wegen der begrenzten Kapazität älterer Dateisysteme notwendig, ist jedoch bei modernen Dateisystemen obsolet. |
Wenn sie sich gegen Hardware-Fehler absichern wollen, dann verwenden sie 2 verschiedene reale Festplatten, nicht eine partionierte Platte. Installieren sie auf beiden Festplatten ein Betriebssystem - Das bietet recht gute Sicherheit gegen Ausfälle. |
NetzlaufwerkSeit der Verbreitung lokaler Netzwerke (LANs) ist es üblich, Bereiche des Dateisystems im LAN freizugeben.● Ein oder mehrere Datei-Server (file-server) bieten Verzeichnisse samt Inhalt zur Verwendung im LAN an. ● Wer die Wahl hat, setzt einen Linux-Server (LAMP) ein und verwendet die kostenlose Linux Standard-Software Samba als Datei-Server für alle PC, gleich welchen betriebssystems. |
● Auch Windows-(Arbeits)-PC können Verzeichnisse als Mini-Dateiserver freigeben. Davon wird allerdings abgeraten. Eine zentrale Verwaltung gemeinsam genutzter Daten ist unbedingt vorzuziehen. Außerdem ist die Verwaltung der Zugangs-Rechte auf Windows kompliziert und nicht so ausgereift wie auf Linux. ● Alle dazu berechtigten PC (im LAN) können die freigegebenen Verzeichnisse (Shares) als Clients im eigenen Dateisystem verwenden. Windows-PC müssen jedes Share als Netzlaufwerk einbinden (mounten). Ein eingebundenes Netzlaufwerk verhält sich (je nach Server-Konfiguration) wie eine Festplatte oder wie ein DVD / CD-Laufwerk. |
DirectoryVolumes enthalten ein Inhaltsverzeichnis (directory) und fast beliebig viele Verzeichnisse & Dateien.Linux ● Moderne Linux-Dateisysteme sind nicht an Volumes gebunden: Das Dateisystem kann je nach AnwenderIn und Bedarf aus beliebig vielen lokalen und entfernten Laufwerken zusammengestellt werden. ● Ein Verzeichnis (lokal oder entfernt) kann an einer oder mehreren beliebigen Stellen in das Datei-Verzeichnis eingehängt werden. Für normale Anwendungen ist das Volume unerheblich und seine Kenntnis nicht notwendig. |
Laufwerks-BuchstabenVolumes werden seit MS-DOS in allen bisherigen M$-Betriebssystemen mit Großbuchstaben bezeichnet.Die Buchstaben A und B sind mit speziellen Eigsnschaften für Disketten reserviert, obwohl diese mittlerweile nicht mehr verwendet werden. Seit der Ausbreitung lokaler Netzwerke (LANs) ist es üblich, zahlreiche Server-Laufwerke (Festplatten, CDs, ...) im Netzwerk freizugeben. Damit ist der Vorrat an Laufwerks-Buchstaben (26) schnell erschöpft. Auch in neuen M$-Systemen sind offenbar nur 31 Volumes vorgesehen. Alle modernen Betriebssysteme verwenden (beliebige und beliebig viele) Namen statt Buchstaben. Eine eigenartige M$ Empfehlung lautet, zusätzliche Volumes nach Verbrauch aller Laufwerks-Buchstaben ohne Buchstaben einzubinden. Das stößt in der Praxis allerdings auf Probleme, da fast jede Win-Software an die lästigen Buchstaben gekettet ist. |
System-Befehle (Konsolen-Programme) |
|
|
Shell Einige Windows Hilfsprogramme dienen zur Verwaltung von Volumes. Mit der VBA-Funktion Shell können u.a. auch Konsolen-Programme ausgeführt werden. ► Testen sie jeden Befehl in einem Konsolen-Fenster (cmd.exe), bevor sie versuchen, ihn mit VBA Shell auszuführen. |
Die angeführten Befehle und Programme sind unverbindliche Beispiele. Je nach System
und Version können die Befehle anders lauten oder andere Optionen verwenden. Die meisten brauchbaren Programme finden sie in C:\Windows/System32 sowie in Toolkit-Sammlungen, z.B. Windows Server 2003 Resource Kit Tools , usw. Sehen sie sich die integrierte Hilfe (Option /?) an, z.B. C:\> fsutil /?
Zusätzlich finden sie im Internet zahlreiche Hinweise.
|
|
Programm fsutil.exe ist ein Standard Volume Werkzeug: Liste aller verfügbaren Volumes (auch nicht verbundene): C:\> fsutil fsinfo drives
Anzeige der Volume-Type:
C:\> fsutil fsinfo drivetype C:
Anzeige der Volume-Eigenschaften:
C:\> fsutil fsinfo volumeinfo C:
|
Anzeige der NTFS-Eigenschaften für Insider
C:\> fsutil fsinfo ntfsinfo C:
Anzeige der Volume-Statistik für Insider
C:\> fsutil fsinfo statistics C:
Freier und verfügbarer Speicherplatz:
C:\> fsutil volume diskfree C:
Trennt die Verbindung mit einem Volume
C:\> fsutil volume dismount C:
|
|
Anzeige der bekannten entfernten FileServer
C:\> net view
|
Anzeige der Energiespar-Optionen:
C:\> powercfg /query
|
|
Anzeige von Name und Serien-Nummer eines Volumes:
C:\> vol
Anzeige anderer Volumes nach Volume-Wechsel:
C:\> D:
D:\> vol |
Disketten-Verwaltung mit diskcomp
und diskcopy Verwaltung virtueller Laufwerke mit subst.exe |
| Verwaltung der Volume-Bezeichnungen mit label.exe | Programm mountvol.exe dient zur Verbindung mit einem Volume. |
| Programm sharepubw.exe dient zur Freigabe eines Verzeichnisses (PC als Mini-Fileserver) | Im Explorer erstellt man die Freigabe eines Verzeichnisses durch oder |
| Einige Befehle / Programme betreffen Hardware oder Hardware-nahe Funktionen, z.B. |
chkdsk, chkntfs, defrag, diskcomp, diskpart, diskperf, format, recover, ...
|
| ♦ Details und Beispiele zur Anwendung der VBA Funktion Shell | ♦ Alternative Lösungen mit Perl oder PHP sind fast immer einfacher und wesentlich schneller ! |
Volume-Verwaltung mit ActiveX |
|||||||||||||||
| Das ActiveX Objekt FileSystemObject erlaubt den Zugriff auf das Dateisystem und damit auch auf Volumes. | Die Verwaltung erfolgt mit Sub-Objekten, Methoden und Eigenschaften, z.B. des Sub-Objekts Drives | ||||||||||||||
|
Das Sub-Objekt Drives repräsentiert alle bekannten Volumes.
Die Objekte fso,drvs werden für die meisten folgenden
Beispiele verwendet.
Dim fso, drv, drvs As Object
Set fso = CreateObject("Scripting.FileSystemObject") Set drvs = fso.Drives |
|||||||||||||||
Anzahl der VolumesEigenschaft Count |
nd = fso.Drives.Count
|
||||||||||||||
Existiert ein Volume ?Eigenschaft DriveExists, Argument = Laufwerks-Buchstabe (hier C ) |
c = Chr(67)
If fso.DriveExists(c) Then '...
End If
|
||||||||||||||
Schleife über alle DrivesBeispiel zur Ausgabe einer Drive-Liste.In der Schleife wird in der Variablen drv jeweils ein anderes Volume-Objekt angesprochen. |
t = ""
For Each drv In drvs t = t & drv.driveletter & ","
NextMsgBox t |
||||||||||||||
Adressierung eines DrivesMit Methode GetDrive kann ein bestimmtes Volume ausgewählt werden (hier die Standard-Festplatte C: ) |
Set drv = fso.GetDrive(fso.GetDriveName("C:"))
|
||||||||||||||
Drive-EigenschaftenVon einem einzelnen Drive-Objekt kann eine ganze Reihe von Eigenschaften ermittelt werden (hier der VolumeName ) |
Set drv = fso.GetDrive(fso.GetDriveName("C:"))
dp = drv.FreeSpace MsgBox "FreeSpace = " & dp |
||||||||||||||
|
Einige Drive-Eigenschaften:
AvailableSpace, DriveLetter, DriveType, FileSystem, FreeSpace, IsReady, Path,
RootFolder, SerialNumber, ShareName, TotalSize, VolumeName
(Größen-Angaben in Byte.)
|
Die meisten Eigenschaften sind selbst-erklärend. DriveType
liefert eine Zahl folgender Bedeutung:
|
||||||||||||||
|
VBA + ActiveX Beispiel:
Das Demo-Programm vol_prop_loop (unten) gibt die Eigenschaften
aller bekannten Volumes in je einem Meldungs-Fenster aus.Dabei wird für jedes Volume das Programm vol_prop_sub (rechts) aufgerufen:
Sub vol_prop_loop()
Dim fso, drvs, drv As Object
Set fso = CreateObject("Scripting.FileSystemObject")
End Sub
For Each drv In fso.Drives vol_prop_sub (drv.DriveLetter)
Next
|
Sub vol_prop_sub(dc As String)
Dim t As String Dim fso, drv As Object
t = "Volume " & dc & vbCrLf
End Sub
On Error Resume Next Set fso = CreateObject("Scripting.FileSystemObject") Set drv = fso.GetDrive(fso.GetDriveName(dc & ":")) t = t & "AvailableSpace = " & drv.AvailableSpace & vbCrLf t = t & "DriveLetter = " & drv.DriveLetter & vbCrLf t = t & "DriveType = " & drv.DriveType & vbCrLf t = t & "FileSystem = " & drv.FileSystem & vbCrLf t = t & "FreeSpace = " & drv.FreeSpace & vbCrLf t = t & "IsReady = " & drv.IsReady & vbCrLf t = t & "Path = " & drv.Path & vbCrLf t = t & "RootFolder = " & drv.RootFolder & vbCrLf t = t & "SerialNumber = " & drv.SerialNumber & vbCrLf t = t & "ShareName = " & drv.ShareName & vbCrLf t = t & "TotalSize = " & drv.TotalSize & vbCrLf t = t & "VolumeName = " & drv.VolumeName & vbCrLf MsgBox t |
||||||||||||||
| Tipp: ActiveX-Methoden können mit leicht unterschiedlicher Syntax auch mit Javascript für das Scripting von Webseiten verwendet werden - allerdings nur auf Windows-Systemen. |
fso = new ActiveXObject("Scripting.FileSystemObject");
|
||||||||||||||
Volume-Verwaltung mit DLL |
|
|
Zahlreiche Programm-Bibliotheken
(Dynamic
Link Library DLL) bieten Programme und Funktionen, die mit eigenen VBA Programmen
genutzt werden können. Die meisten DLLs sind allerdings vergleichsweise kompliziert anzuwenden, bescheiden dokumentiert und abhängig von der jeweiligen System- und DLL-Version. |
Einen weiteren Nachteil teilen DLLs mit ActiveX: Beide sind nur auf Windows-Systemen
verwendbar. Im Gegensatz dazu sind Script-Programme in Perl oder PHP rasch und kostengünstig zu programmieren, mit vielen Beispielen gut dokumentiert und ganz oder zumindest weitgehend unabhängig vom Betriebssystem, d.h. zwischen Linux und Windows portabel. |
Drive-Liste:Dieses Demo-Programm wird als Beispiel für die Nutzung einer DLL angeführt. Es liefert eine Liste aller verfügbaren Drives in je einem Alarmfenster.Allen DLL-Beispielen gemeinsam ist die obligatorische Deklaration am Beginn des Moduls. Hier erfolgt die Verknüpfung zwischen der verwendeten DLL und den im eigenen Programm verwendeten Funktionen. Demo: Der Drive-Buchstabe wird mit Chr$(i+64) fixiert: Chr$(65) ergibt "A". Die wichtigsten Eigenschaften werden mit GetDriveType ermittelt und ausgegeben. Hinweis: Dieses Programm arbeitet mit Funktionen, ohne das Drive-Objekt (s.u.) Sie können dieses Programm leicht für ihren Bedarf modifizieren: Verwenden sie Function an Stelle von Sub und testen sie ein bestimmtes Laufwerk, oder suchen sie nach Festplatte, CD, ... Das Ergebnis wird dann als Funktionswert zurückgegeben, die MsgBox kann entfallen. |
Declare Function GetDriveType Lib "kernel32"
Alias "GetDriveTypeA" (ByVal nDrive As String) As Long
Declare Function GetLogicalDrives Lib "kernel32" () As Long Sub GetDrives() Dim l& Dim i, j As Integer Dim s, t As String Dim dt As Variant
dt = Array("unknown", _
End Sub
"removable(Diskette, Cartridge)", _
l = GetLogicalDrives()"fixed (HardDisk)", "Network", _ "readonly(CD/DVD)", "RAMdisk") j = 0 For i = 1 To 31
If l And (2 ^ (i - 1)) Then
Next
s = Chr$(i + 64) + ":\"
End If
t = GetDriveType(s) If (i = 1) Then j = 1 - t t = t + j s = "Drive = " & s & _
Chr(13) & "DriveType = " & t & _
MsgBox (s)
Chr(13) & dt(t) |
|
|
Eine Live-Demonstration finden sie auf der Seite
Umgebungs-Daten
mit ActiveX.
|
|