Узнайте свободное и общее пространство в сети и путь c в netcore 3.x - PullRequest
1 голос
/ 05 апреля 2020

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

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

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

, но для пути un c будет ошибка с

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

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

1 Ответ

1 голос
/ 05 апреля 2020

Если ваше приложение работает только на Windows, вы можете попробовать GetDiskFreeSpaceEx, что MSDN docs говорит, что оно поддерживает UN C путь.

[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 __);
...