I can view a remotly connected pc from this article:Remote Desktop using c-net . but i dont need it. I just have to connect with that pc and get the free space data of C drive. How could i do this? I can connect to a remote desktop. I can get driveInfo using IO namespace. but how to combine them?
Use the System.Management
namespace and Win32_Volume
WMI class for this. You can query for an instance with a DriveLetter
of C:
and retrieve its FreeSpace
property as follows:
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...
}
}
There is also a Capacity
property that stores the total size of the volume.
scope.Options
property, which is an instance of the ConnectionOptions
class. –
Strohl freeSpace / 1024 / 1024 / 1024
or, I presume, freeSpace / 1000 / 1000 / 1000
? –
Strohl After losing a full day trying to make WMI work remotely without success I discovered an alternative using performance counters. Simply check the Free Megabytes
counter in the LogicalDisk
category using the desired drive letter (appended by ":") as the instance name to get an updated reading of the drive's available free space:
"LogicalDisk(C:)\Free Megabytes"
You can access it programmatically in C# through the PerformanceCounter Class.
For accessing it remotely you'll need to specify the server name to the performance counter class constructor and the impersonated account must be added to the "Performance Monitor Users" group:
net localgroup "Performance Monitor Users" %username% /add
PerformanceCounter
code that queries this value. –
Strohl Here is the vb.net equivalent in case you need to translate it.
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
© 2022 - 2024 — McMap. All rights reserved.