GetDiskFreeSpaceEx (coredll)
Last changed: lewisw@tesco.net-92.24.26.235

.
Summary
Retrieves information about the amount of space available on a disk volume.

C# Signature:

[DllImport("coredll.dll", SetLastError=true, CharSet=CharSet.Auto)]
[return: MarshalAs(UnmanagedType.Bool)]
   static extern bool GetDiskFreeSpaceEx(string lpDirectoryName,
   out ulong lpFreeBytesAvailable,
   out ulong lpTotalNumberOfBytes,
   out ulong lpTotalNumberOfFreeBytes);

VB.Net Signature:

    <DllImport("coredll.dll", EntryPoint:="GetDiskFreeSpaceEx", SetLastError:=True, CharSet:=CharSet.Auto)> _
    Private Shared Function GetDiskFreeSpaceEx( _
    ByVal lpDirectoryName As String, _
    ByRef lpFreeBytesAvailable As ULong, _
    ByRef lpTotalNumberOfBytes As ULong, _
    ByRef lpTotalNumberOfFreeBytes As ULong) As Boolean
    End Function

or

   Private Declare Function GetDiskFreeSpaceEx _
   Lib "kernel32" _
   Alias "GetDiskFreeSpaceExA" _
  (ByVal lpDirectoryName As String, _
  ByRef lpFreeBytesAvailableToCaller As Long, _
  ByRef lpTotalNumberOfBytes As Long, _
  ByRef lpTotalNumberOfFreeBytes As Long) As Long

User-Defined Types:

None.

Notes:

None.

Tips & Tricks:

VB.NET does not require "\\" to specify "\", so for example in VB on a device

        iret = GetDiskFreeSpaceEx("\", Freebytes, TotalBytes, TotalFreebytes)

Sample Code:

ulong FreeBytesAvailable;
ulong TotalNumberOfBytes;
ulong TotalNumberOfFreeBytes;

bool success = GetDiskFreeSpaceEx("C:\\", out FreeBytesAvailable, out TotalNumberOfBytes,
                   out TotalNumberOfFreeBytes);
if (!success)
    throw new System.ComponentModel.Win32Exception();

Console.WriteLine("Free Bytes Available:      {0,15:D}", FreeBytesAvailable);
Console.WriteLine("Total Number Of Bytes:     {0,15:D}", TotalNumberOfBytes);
Console.WriteLine("Total Number Of FreeBytes: {0,15:D}", TotalNumberOfFreeBytes);

Documentation