Посмотреть AvailableFreeSpace дисков через IP-адрес
Я знаю, что AvailableFreeSpace можно использовать для локальных дисков, таких как "C:/", "D:/" и т. Д. Он также работает на сетевых дисках.
Но теперь мой вопрос:
Можно ли просмотреть AvailableFreeSpace "Папка" на другом IP? Я подключаюсь к локальным дискам с помощью этого кода:
System.IO.DriveInfo _DriveInfo = new DriveInfo(SaveLocation);
Когда "SaveLocation" является локальным диском типа "C:\Temp\Folder", тогда он работает нормально.
Но когда внутри "SaveLocation" есть IP-адрес, он не работает. В этом случае SaveLocation выглядит так: "192.168.200.10\c\Data"
Это не работает, и это причина моего вопроса. Сообщение об исключении: {"Объект должен быть корневым каталогом (\"C:\\") или буквой диска (\"C\")."}
Я надеюсь, что вы можете мне помочь.
1 ответ
Как видно в разделе Получить доступное дисковое пространство для заданного пути в Windows:
Используйте функцию winapi GetDiskFreeSpaceEx
определить свободное место на UNC (сетевом) пути. Например, создайте новый проект VS под названием FreeSpace и вставьте его как Program.cs:
using System;
using System.Runtime.InteropServices;
namespace FreeSpace
{
class Program
{
[DllImport("kernel32.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);
static void Main(string[] args)
{
ulong FreeBytesAvailable;
ulong TotalNumberOfBytes;
ulong TotalNumberOfFreeBytes;
bool success = GetDiskFreeSpaceEx(@"\\NETSHARE\folder",
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);
Console.ReadKey();
}
}
}
Как вы можете видеть, это тот же код, что и в вопросе, связанном выше, только с учётом класса и правильного using
директивы для компиляции без ошибок. Все кредиты идут на rekire
WMI, похоже, не обрабатывает свободное место на сетевых ресурсах. Но для локальных дисков лучше использовать интерфейс управления Windows: https://msdn.microsoft.com/en-us/library/aa394592(v=vs.85).aspx