如何在C#中检测从一台服务器到另一台服务器的可用空间和磁盘信息

时间:2011-03-17 10:45:59

标签: c# .net

如果网络上有3个,如果我想从另一台电脑上检测一台电脑的自由空间和磁盘细节,那么该如何去做... 我找到了这段代码。但我不知道如何测试它以便知道它是否正常工作。 这是正确的方法吗?

public Hashtable ReadFreeSpaceOnNetworkDrives()
{
     //create Hashtable instance to hold our info
     Hashtable driveInfo = new Hashtable();
     //query the win32_logicaldisk for type 4 (Network drive)
     SelectQuery query = new SelectQuery("select name, FreeSpace from win32_logicaldisk where drivetype=4");

     //execute the query using WMI
     ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
     //loop through each drive found
     foreach (ManagementObject drive in searcher.Get())
     {
        //add the name & freespace to our hashtable
        driveInfo.Add("Drive", drive["name"]);
        driveInfo.Add("Space", drive["FreeSpace"]);
     }
     return driveInfo;
}

更新

我得到了我的问题的答案,但我已经得到了代码,但它是在控制台应用程序中,我想在Windows窗体应用程序中使用磁盘空间和驱动器信息的图形表示。我该如何使用此代码并继续这样做?

        ManagementScope scope = new ManagementScope("\\\\10.74.160.126\\root\\cimv2");
        scope.Connect();

        ObjectQuery query = new ObjectQuery( "SELECT * FROM Win32_OperatingSystem");
        SelectQuery query1 = new SelectQuery("Select * from Win32_LogicalDisk");

        ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);

        ManagementObjectCollection queryCollection = searcher.Get();

        ManagementObjectSearcher searcher1 = new ManagementObjectSearcher(scope, query1);
        ManagementObjectCollection queryCollection1 = searcher1.Get(); 

        foreach (ManagementObject m in queryCollection)
        {
            // Display the remote computer information
            Console.WriteLine("Computer Name : {0}",
                m["csname"]);
            Console.WriteLine("Windows Directory : {0}",
                m["WindowsDirectory"]);
            Console.WriteLine("Operating System: {0}",
                m["Caption"]);
            Console.WriteLine("Version: {0}", m["Version"]);
            Console.WriteLine("Manufacturer : {0}", m["Manufacturer"]);
            Console.WriteLine();

            }

        foreach (ManagementObject mo in queryCollection1)
        {
            Console.WriteLine("  Disk Name : {0}", mo["Name"]);
            Console.WriteLine("   Disk Size : {0}", mo["Size"]); 
            Console.WriteLine("  FreeSpace : {0}", mo["FreeSpace"]);
            Console.WriteLine("  Disk DeviceID : {0}", mo["DeviceID"]); 
            Console.WriteLine("  Disk VolumeName : {0}", mo["VolumeName"]);
            Console.WriteLine("  Disk SystemName : {0}", mo["SystemName"]); 
            Console.WriteLine("Disk VolumeSerialNumber : {0}", mo["VolumeSerialNumber"]);
            Console.WriteLine(); 
        }
        Console.ReadLine();
        }

2 个答案:

答案 0 :(得分:1)

代码检查运行此程序的PC上的所有驱动器。它返回一个表,每个驱动器有2个条目。一个有名字,一个有自由空间。您可以编写一个使用此方法的简单程序并显示此数据。应该可以从远程计算机查询驱动器。也许这篇文章可以告诉你更多http://msdn.microsoft.com/en-us/library/ms257337%28v=vs.80%29.aspx

编辑:

public Hashtable ReadFreeSpaceOnNetworkDrives(String FullComputerName)
{
     ManagementScope scope = new ManagementScope(fullComputerName);
     scope.Connect();
     //create Hashtable instance to hold our info
     Hashtable driveInfo = new Hashtable();
     //query the win32_logicaldisk for type 4 (Network drive)
     SelectQuery query = new SelectQuery("select name, FreeSpace from win32_logicaldisk where drivetype=4");

     //execute the query using WMI
     ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope,query);
     //loop through each drive found
     foreach (ManagementObject drive in searcher.Get())
     {
        //add the name & freespace to our hashtable
        driveInfo.Add("Drive", drive["name"]);
        driveInfo.Add("Space", drive["FreeSpace"]);
     }
     return driveInfo;
}

答案 1 :(得分:-2)

转换为c#。这可能会对你有所帮助。 http://www.codeguru.com/forum/showthread.php?t=426869