Узнайте свободное и общее пространство на сетевом пути unc в netcore 3.x

Я обновляю приложение, которое ранее использовало AlphaFS для обеспечения операций ввода-вывода для локальных и сетевых путей.

Одна из функций - вернуть на диске свободное и доступное место. Это отлично работает, если диск локальный или сопоставлен с помощью DriveInfo.

 var pathRoot = System.IO.Path.GetPathRoot(startPath);
 var driveInfo = new DriveInfo(pathRoot);
 AvailSpace = (ulong) driveInfo.AvailableFreeSpace;
 TotalSpace = (ulong) driveInfo.TotalSize;

но для пути unc будет ошибка с

Drive name must be a root directory (i.e. 'C:\\') or a drive letter ('C'). "

Есть ли подходящая альтернатива DriveInfo, которую можно использовать для сетевых путей unc в .netcore 3.x?


person Jafin    schedule 05.04.2020    source источник


Ответы (1)


Если ваше приложение работает только в Windows, вы можете попробовать GetDiskFreeSpaceEx, который в документах MSDN говорится он поддерживает путь UNC.

[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool GetDiskFreeSpaceEx(string lpDirectoryName,
    out ulong lpFreeBytesAvailable,
    out ulong lpTotalNumberOfBytes,
    out ulong lpTotalNumberOfFreeBytes);

GetDiskFreeSpaceEx("\\\\server\\path\\", out var size, out var _, out var __);
person weichch    schedule 05.04.2020
comment
Я обнаружил, что на моем RAM-диске GetDiskFreeSpaceEx не работает ни с R:\ путями, ни с \\?\R:\ путями. - person Roland Pihlakas; 13.09.2020