Я хочу получить доступное свободное место на диске, когда установлена дисковая квота. Я ограничил свой диск D 500 ГБ с дисковой квотой, диск D ограничен 500 ГБ . Без настройки дисковой квоты свободное пространство D составляет 803Гб D-диск без дисковой квоты
И из этого вопроса Получить свободное место на диске , я получил код из sasha_gud и адаптировать его в консольное приложение.
class Program
{
// Pinvoke for API function
[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool GetDiskFreeSpaceEx(string lpDirectoryName,
out ulong lpFreeBytesAvailable,
out ulong lpTotalNumberOfBytes,
out ulong lpTotalNumberOfFreeBytes);
static void Main(string[] args)
{
var lFolderPath = @"D:\Imagepools12";
ulong lAvailableBytes, lTotalFree, dummy1;
if (GetDiskFreeSpaceEx(lFolderPath, out lAvailableBytes, out dummy1, out lTotalFree))
{
Console.WriteLine($"The available free space of {lFolderPath} is {lAvailableBytes} and total free is {lTotalFree}");
}
Console.ReadKey();
}
}
Когда я отлаживаю его в Visual Studio 2019, я получил результат lAvailableBytes и lTotalFree, оба равные 862827331584. Отладка в VS ошибается lAvailableBytes
Когда я напрямую go папку Debug и дважды щелкаю исполняемый файл, я получаю правильный lAvailableBytes Run exe получить правильный lAvailableBytes
Не могли бы вы помочь мне понять, почему отладка в VS не может получить правильный lAvailabelBytes? А как исправить? Спасибо!
Обновление: Спасибо, @Ben Voigt, за то, что выяснил, что я запустил свой VS как администратор и напрямую запустил exe как свою учетную запись пользователя, поэтому я получил другой результат. Тогда как я могу как администратор получить информацию о диске для определенного пользователя вместо текущего пользователя?