Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否有办法将iSCSI驱动器上的可用空间装载为NTFS文件夹_C#_Iscsi - Fatal编程技术网

C# 是否有办法将iSCSI驱动器上的可用空间装载为NTFS文件夹

C# 是否有办法将iSCSI驱动器上的可用空间装载为NTFS文件夹,c#,iscsi,C#,Iscsi,我有一堆iSCSI驱动器(以避免耗尽所有驱动器号)充当迷你SAN,我想了解有关其可用空间的信息。基本原因是在空间低于某个阈值时收到警告,这是执行一系列其他检查的计划任务的一部分 有没有办法做到这一点,最好使用C#(通过WMI、p/Invoke或其他方式)?当然,任何脚本解决方案都很好,因为我可能无论如何都可以调用它(PowerShell)?我首先尝试了乐观路由,使用DriveInfo使用这样的路径初始化,但它只返回有关根卷的信息,而不是装载的信息。我也尝试过枚举诸如Win32\u DiskPar

我有一堆iSCSI驱动器(以避免耗尽所有驱动器号)充当迷你SAN,我想了解有关其可用空间的信息。基本原因是在空间低于某个阈值时收到警告,这是执行一系列其他检查的计划任务的一部分


有没有办法做到这一点,最好使用C#(通过WMI、p/Invoke或其他方式)?当然,任何脚本解决方案都很好,因为我可能无论如何都可以调用它(PowerShell)?我首先尝试了乐观路由,使用
DriveInfo
使用这样的路径初始化,但它只返回有关根卷的信息,而不是装载的信息。我也尝试过枚举诸如
Win32\u DiskPartition
Win32\u LogicalDisk
Win32\u MappedLogicalDisk
之类的东西,但根本没有得到这些驱动器。

正如@FrédéricHamidi解释的那样,WMI存储卷提供程序中的类显示了有关已装入卷的正确空间信息

用法示例(C#)类似于:

// iSCSI drive mounted in a NTFS folder
var ntfsPath = @"x:\iscsi\volume";

// it's good to know that backspaces must be escaped in WMI queries
var cmd = string.Format(
    "SELECT * FROM Win32_Volume WHERE Name LIKE '{0}%'", 
    ntfsPath.Replace(@"\", @"\\"));

using (var searcher = new ManagementObjectSearcher(cmd))
{
    foreach (ManagementObject queryObj in searcher.Get())
    {
        var name = (string)queryObj["Name"];
        var freeSpaceInBytes = (ulong)queryObj["FreeSpace"];
    }
}

这显然是错误的。看起来它依赖于
Win32_卷
WMI类。@FrédéricHamidi:嘿,非常感谢<代码>Win32_卷确实列出了这些驱动器。您可以将此添加为答案。