我可以从这篇使用C#远程桌面文章中查看连接到远程计算机,但我并不需要这个功能。我只需要连接到该计算机并获取C盘的可用空间数据。如何实现?我可以连接到远程桌面,使用IO命名空间获取DriveInfo,但如何将它们结合起来呢?
我可以从这篇使用C#远程桌面文章中查看连接到远程计算机,但我并不需要这个功能。我只需要连接到该计算机并获取C盘的可用空间数据。如何实现?我可以连接到远程桌面,使用IO命名空间获取DriveInfo,但如何将它们结合起来呢?
使用System.Management
命名空间和Win32_Volume
WMI类来完成此操作。您可以查询一个具有C:
驱动器号的实例,并按以下方式检索其FreeSpace
属性:
ManagementPath path = new ManagementPath() {
NamespacePath = @"root\cimv2",
Server = "<REMOTE HOST OR IP>"
};
ManagementScope scope = new ManagementScope(path);
string condition = "DriveLetter = 'C:'";
string[] selectedProperties = new string[] { "FreeSpace" };
SelectQuery query = new SelectQuery("Win32_Volume", condition, selectedProperties);
using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query))
using (ManagementObjectCollection results = searcher.Get())
{
ManagementObject volume = results.Cast<ManagementObject>().SingleOrDefault();
if (volume != null)
{
ulong freeSpace = (ulong) volume.GetPropertyValue("FreeSpace");
// Use freeSpace here...
}
}
此外,还有一个Capacity
属性,用于存储卷的总大小。
freeSpace / 1024 / 1024 / 1024
还是freeSpace / 1000 / 1000 / 1000
来计算可用的GB数? - Lance U. MatthewsLogicalDisk
类别中以所需驱动器字母(附加“:”)作为实例名称的Free Megabytes
计数器,即可获得驱动器可用空间的最新读数:"LogicalDisk(C:)\Free Megabytes"
你可以通过 PerformanceCounter Class 在 C# 中以编程方式访问它。
要远程访问它,你需要在 performance counter class constructor 中指定服务器名称,并将模拟的帐户添加到“性能监视器用户”组中:
net localgroup "Performance Monitor Users" %username% /add
如果您需要翻译,这里是 VB.NET 的等效代码。
Dim path = New ManagementPath With {.NamespacePath = "root\cimv2",
.Server = "<REMOTE HOST OR IP>"}
Dim scope = New ManagementScope(path)
Dim condition = "DriveLetter = 'C:'"
Dim selectedProperties = {"FreeSpace"}
Dim query = New SelectQuery("Win32_Volume", condition, selectedProperties)
Dim searcher = New ManagementObjectSearcher(scope, query)
Dim results = searcher.Get()
Dim volume = results.Cast(Of ManagementObject).SingleOrDefault()
If volume IsNot Nothing Then
Dim freeSpace As ULong = volume.GetPropertyValue("FreeSpace")
End If