.Net Core在其他操作系统上查找可用磁盘空间

时间:2018-07-17 21:32:37

标签: c# asp.net-core .net-core

有没有一种方法可以使用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。

2 个答案:

答案 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)