c# - 找出网络核心 3.x 中网络 UNC 路径上的可用空间和总空间

标签 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;

但对于 UNC 路径,它会出错
Drive name must be a root directory (i.e. 'C:\\') or a drive letter ('C'). "

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

最佳答案

如果您的应用程序只在 Windows 上运行,您可以尝试 GetDiskFreeSpaceEx ,其中 MSDN docs说它支持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 __);

关于c# - 找出网络核心 3.x 中网络 UNC 路径上的可用空间和总空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61037184/

相关文章:

msbuild - 如何检查 MSBuild 是否正在使用 .NET Core?

Azure KeyVault secret 值在启动期间在 IConfiguration 中不可用

c# - dotnet core 2.0 中 appSettings.json 中的 SMTP 设置

c# - 使用 javascript 函数在特定条件下从代码隐藏中调用

c# - 围绕异步等待

.net-core - 我们可以保护仅使用 aspnet 身份的 dotnet core 2.0 React App 吗?

docker - 在 dockerfile 中安装包

azure - 如何使用 azure DevOps 在单个应用程序服务中部署多个 .net core webjob?

oracle - oracle 数据库中特定表的脚手架 dbcontext 抛出与该表无关的错误

c# - AutoMapper 区分大小写还是不区分大小写?