Hi peeps,
Today at work I had an issue with a shared drive on the network which has a quota. So I was wondering how to know if the allowed space is already full or not.
According to my readings on Google, there are only two methods that works for a network drive: WMI or Kernel32 DLL.
Not being a big fan of WMI, I used the Kernel32 here.
public static class DiskHelper
{
public static long FreeSpace(string folderName)
{
if (string.IsNullOrEmpty(folderName))
throw new ArgumentNullException(nameof(folderName));
if (!folderName.EndsWith("\\")) folderName += '\\';
long free = 0, dummy1 = 0, dummy2 = 0;
if (GetDiskFreeSpaceEx(folderName, ref free, ref dummy1, ref dummy2))
return free;
return -1;
}
[SuppressMessage("Microsoft.Security", "CA2118:ReviewSuppressUnmanagedCodeSecurityUsage"), SuppressUnmanagedCodeSecurity]
[DllImport("Kernel32", SetLastError = true, CharSet = CharSet.Auto)]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool GetDiskFreeSpaceEx
(
string lpszPath, // Must name a folder, must end with '\'.
ref long lpFreeBytesAvailable,
ref long lpTotalNumberOfBytes,
ref long lpTotalNumberOfFreeBytes
);
}And now you can use it like this:
var folderPath = @"\\test\MyProject"; var availableSpace = DiskHelper.FreeSpace(folderPath);
Happy coding! 🙂



