有没有一种方法可以使用C#ASP.NET Core在不同的OS(主要是Linux和Windows)上找到可用空间。
我找到了一种方法(使用DriveInfo)通过将驱动器名称作为参数来获取可用空间。在Windows上这可以正常工作,但是我也希望在Linux上也可以。
public static int CheckDiskSpace(string driveLetter)
{
DriveInfo drive = new DriveInfo(driveLetter);
var totalBytes = drive.TotalSize;
var freeBytes = drive.AvailableFreeSpace;
var freePercent = (int)((100 * freeBytes) / totalBytes);
return freePercent;
}
通过驱动器(C:/)如下:
var freespace = DriveDetails.CheckDiskSpace("C:/");
更新:这也适用于Linux。
答案 0 :(得分:3)
对于Linux下的Net.Core,您可以致电
var freeBytes = new DriveInfo(path).AvailableFreeSpace;
其中path是相对或绝对文件夹名称,它自动为您提供有关存储此路径的分区的驱动器信息。在Net.Core 2.2上进行了测试。
作为对比,在Windows中,您可以:
A)需要提供驱动器号(不幸的是,该驱动器号不能直接从相对路径派生,因此您需要做一些额外的工作,并且根本无法为UNC路径进行计算)。
B)需要使用Windows API(这也适用于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(path, out var freeBytes, out var _, out var __);
答案 1 :(得分:1)
如果使用的是.Net Core,则可以使用System.AppContext.BaseDirectory
(OR)
Path.GetDirectoryName(Assembly.GetEntryAssembly().Location)