找出 netcore 3.x 中网络 unc 路径上的可用空间和总空间

Jaf*_*fin 4 c# .net-core .net-core-3.1

我正在更新一个以前使用 AlphaFS 为本地和网络路径提供 IO 操作的应用程序。

其中一项功能是返回驱动器的空闲和可用空间。如果驱动器是本地驱动器或使用 DriveInfo 进行映射,则此方法可以正常工作

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

但对于 unc 路径,它会出错

驱动器名称必须是根目录(即“C:\”)或驱动器号(“C”)。

是否有 DriveInfo 的合适替代方案可用于 .NET Core 3.x 中的网络 unc 路径?

wei*_*hch 5

如果您的应用程序仅在Windows上运行,您可以尝试GetDiskFreeSpaceExMSDN文档说它支持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 __);
Run Code Online (Sandbox Code Playgroud)