using System.Runtime.InteropServices;
// per PInvoke aus der kernel32.dll die Funktion GetDiskFreeSpace() importieren
[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)]
static extern bool GetDiskFreeSpace(
string sRootPathName,
ref uint uiSectorsPerCluster,
ref uint uiBytesPerSector,
ref uint uiNumberOfFreeClusters,
ref uint uiTotalNumberOfClusters);
// Hilfsfunktion zum Ermitteln der Clustergröße
// theoretisch kann damit auch die Anzahl der freien Bytes
// eines LW berechnet werden (uiNumberOfFreeClusters * uiSectorsPerCluster * uiBytesPerSector)
// Problem ist hier, dass dies nur für Volumengrößen bis 2GB funktioniert
// alternativ sollte dazu dann System.IO.DriveInfo verwendet werden :)
public uint ClusterSizeInBytes(string sRootPath)
{
uint uiRetVal = 0;
uint uiSectorsPerCluster = 0;
uint uiBytesPerSector = 0;
uint uiNumberOfFreeClusters = 0;
uint uiTotalNumberOfClusters = 0;
if (GetDiskFreeSpace(sRootPath, ref uiSectorsPerCluster, ref uiBytesPerSector, ref uiNumberOfFreeClusters, ref uiTotalNumberOfClusters))
{
uiRetVal = uiSectorsPerCluster * uiBytesPerSector;
}
return uiRetVal;
}