vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
Rubrik: Dateisystem · Ordner & Verzeichnisse   |   VB-Versionen: VB628.12.15
Ordner-Inhalte im Dateisystem komprimieren (WMI)

Eine Funktion, mit der sich der Inhalt eines Ordners im Dateisystem (de-)komprimierem lässt, um Speicherplatz auf dem Datenträger zu sparen.

Autor:   Dieter OtterBewertung:  Views:  5.778 
www.tools4vb.deSystem:  Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

Wird der Festplattenspeicher knapp, bietet das System seit Windows Vista eine Möglichkeit, den Inhalt eines Ordners zu komprimieren. Die Ordner-Komprimierung kann hierbei über die "erweiterten Ordner-Attribute" aus dem Eigenschaften-Dialog (Rechtsklick auf Ordner) heraus aufgerufen werden.

Komprimierte Ordner bzw. Ordner-Inhalte werden dann im Windows Explorer blau dargestellt.

Erweiterte Attribute

Und genau diese Funktionalität kann man auch aus dem eigenen Programm heraus steuern - per WMI.

' Komprimiert / De-Komprimiert einen Datei-Ordner im Dateisystem
Public Function CompressFolder(ByVal sFolder As String, _
  Optional ByVal UnCompress As Boolean = False) As Boolean
 
  Dim oWMI As Object
  Dim oFolders As Object
  Dim oFolder As Object
  Dim sSQL As String
  Dim bResult As Boolean
  Dim nResult As Long
 
  ' Fehlerbehandlung
  On Error GoTo SubExit
 
  ' WMI-Objekt erstellen
  Set oWMI = GetObject("winmgmts:\\.\root\cimv2")
 
  ' Verzeichnis selektieren
  sSQL = "SELECT * FROM Win32_Directory WHERE Name='" & Replace(sFolder, "\", "\\") & "'"
 
  ' Order-Objekt erstellen
  Set oFolders = oWMI.ExecQuery(sSQL)
  For Each oFolder In oFolders
    ' Ordner und darin enthaltene Dateien (de-)komprimieren
    If UnCompress Then
      nResult = oFolder.UnCompress
    Else
      nResult = oFolder.Compress
    End If
    Debug.print oFolder.Name, nResult
    bResult = (nResult = 0)
  Next
  On Error GoTo 0
 
SubExit:
  ' Objekte freigeben
  Set oFolders = Nothing
  Set oWMI = Nothing
 
  CompressFolder = bResult
End Function

Aufrufbeispiel:

' alle Dateien im Ordner D:\Temp\MyDoc komprimieren
Dim bResult As Boolean
bResult = CompressFolder("D:\Temp\MyDoc")
' alle Dateien im Ordner D:\Temp\MyDoc de-komprimieren
Dim bResult As Boolean
bResult = CompressFolder("D:\Temp\MyDoc", True)



Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
 
Copyright ©2000-2024 vb@rchiv Dieter OtterAlle Rechte vorbehalten.


Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.