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

https://www.vbarchiv.net
Rubrik: Dateisystem · Dateien allgemein   |   VB-Versionen: VB4, VB5, VB613.07.05
Größe einer komprimierten Datei ermitteln

Unter Windows NT/2000/XP können Datein im komprimierter Form auf der Festplatte gespeichert werden. Wie man den tatsächlichen Speicherbedarf einer komprimeirten Datei ermitteln kann, das erfahren Sie hier.

Autor:   Dieter OtterBewertung:  Views:  9.690 
www.tools4vb.deSystem:  WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

Unter Windows NT/2000/XP können bei Verwendung des NTFS-Dateisystems Dateien komprimiert auf der Festplatte gespeichert werden. Diese Dateien benötigen demzufolge weniger Festplatten-Platz. Wenn Sie nun wissen möchten, wieviel Speicherplatz komprimierte Dateien tatsächlich benötigen, haben Sie ein Problem. Denn sowohl die FileLen-Funktion, als auch die Size-Eigenschaft der FileSystemObject-Klasse liefert in diesem Fall immer die Original-Größe der Datei - nicht aber die tatsächliche Größe, die eine komprimierte Datei auf der Festplatte belegt.

Wie so oft, können wir dem aber unter Zuhilfenahme des Windows-API oder genauer gesagt durch Einsatz der GetCompressedFileSize-Funktion Abhilfe schaffen. Die Funktion selbst erwartet als ersten Parameter den Dateinamen und gibt die komprimierte Größe der angegebenen Datei in zwei Werten zurück: Der Rückgabewert der Funktion enthält die ersten 32 Bit der Dateigröße, was für Dateien bis zu 4 GB ausreicht. Werden mehr als 4 GB Speicherplatz für die Datei benötigt, werden die nächsten 32 Bit der Dateigröße im zweiten Parameter der Funktion zurückgegeben.

Option Explicit
 
' Benötigte API-Deklaration
Private Declare Function GetCompressedFileSize Lib "kernel32" _
  Alias "GetCompressedFileSizeA" ( _
  ByVal lpFileName As String, _
  ByRef lpFileSizeHigh As Long) As Long
' Größe einer komprimierten Datei ermitteln
Private Function GetCompressedSize(ByVal sFile As String) As Double
  Dim nSizeHigh As Long
  Dim nSize As Double
 
  nSize = GetCompressedFileSize(sFile, nSizeHigh)
  If nSize < 0 Then nSize = 2147483648# + (2147483648# - Abs(nSize))
  If nSizeHigh > 0 Then
    nSize = nSize + (nSizeHigh * 4294967296#) ' 2 ^32
  End If
 
  GetCompressedSize = nSize
End Function



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.