using System.Runtime.InteropServices;
public static void Main()
GetDiskFreeSpaceEx1(dir, out available, out totalBytes, out totalFree);
Console.WriteLine(available);
GetDiskFreeSpaceEx2(dir, ref available, ref totalBytes, ref totalFree);
Console.WriteLine(available);
[DllImport("kernel32.dll", EntryPoint = "GetDiskFreeSpaceEx", SetLastError = true, CharSet = CharSet.Auto)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool GetDiskFreeSpaceEx1(
[In] string lpDirectoryName,
[Out] out ulong lpFreeBytesAvailable,
[Out] out ulong lpTotalNumberOfBytes,
[Out] out ulong lpTotalNumberOfFreeBytes);
[DllImport("kernel32.dll", EntryPoint = "GetDiskFreeSpaceEx", SetLastError = true, CharSet = CharSet.Auto)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool GetDiskFreeSpaceEx2(
[In] string lpDirectoryName,
[In, Out] ref ulong lpFreeBytesAvailable,
[In, Out] ref ulong lpTotalNumberOfBytes,
[In, Out] ref ulong lpTotalNumberOfFreeBytes);