【问题标题】:How to detect freespace and disk information from one server to other in C#如何在 C# 中检测从一台服务器到另一台服务器的可用空间和磁盘信息
【发布时间】:2011-07-17 07:33:14
【问题描述】:

如果网络上有 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();
        }

【问题讨论】:

    标签: c# .net


    【解决方案1】:

    代码检查运行此程序的电脑上的所有驱动器。它返回一个表,每个驱动器有 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;
    }
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • -1:您提供的链接中的代码是VBScript,它并不能真正帮助回答问题
      • 你总是在互联网上提供一个 vb 到 c# 转换器。
      • -1。这是一个仅限链接的答案。请包括您要链接的文章的要点;将来可能无法使用。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-06
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 2020-11-26
      相关资源
      最近更新 更多