C# GetDiskFreeSpaceEx показывает разные результаты при отладке и запуске исполняемого файла - PullRequest
0 голосов
/ 14 июля 2020

Я хочу получить доступное свободное место на диске, когда установлена ​​дисковая квота. Я ограничил свой диск 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 как свою учетную запись пользователя, поэтому я получил другой результат. Тогда как я могу как администратор получить информацию о диске для определенного пользователя вместо текущего пользователя?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...