【问题标题】:How can I check for available disk space?如何检查可用磁盘空间?
【发布时间】:2021-04-16 23:30:12
【问题描述】:

在将文件复制到该服务器之前,我需要一种方法来检查 远程 Windows 服务器上的可用磁盘空间。使用这种方法,我可以检查主服务器是否已满,如果是,我会将文件复制到辅助服务器。

如何使用 C#/ASP.net 2.0 检查可用磁盘空间?

【问题讨论】:

标签: c# asp.net diskspace


【解决方案1】:

您可以通过以下方式进行检查:

添加System.Management.dll 作为对您项目的引用。

使用以下代码获取磁盘空间:

using System;
using System.Management;

public string GetFreeSpace();
{ 
   ManagementObject disk = new ManagementObject("win32_logicaldisk.deviceid=\"c:\"");
   disk.Get();
   string freespace = disk["FreeSpace"];
   return freespace;
}

有很多方法可以做到这一点,我会检查 System.Management 命名空间以了解更多方法。

这是该页面的一种方式:

public void GetDiskspace()
    {
      ConnectionOptions options = new ConnectionOptions();
      ManagementScope scope = new ManagementScope("\\\\localhost\\root\\cimv2", 
      options);
      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)
      {
          // Display Logical Disks information

         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();
      }
      string line;
      line = Console.ReadLine(); 
    }

【讨论】:

  • 这适用于正在执行代码的机器,但对于远程服务器呢?
  • 我发给你的链接可以告诉你怎么做;我没做过;但我可以发布你用来查询服务器的代码。
  • 啊,好吧,我错过了 ManagementScope,那么这应该对我有用。我试试看
【解决方案2】:

通过使用此代码

 static void Main()
    {
        try
        {
            DriveInfo driveInfo = new DriveInfo(@"C:");
            long FreeSpace = driveInfo.AvailableFreeSpace;
        }
        catch (System.IO.IOException errorMesage)
        {
            Console.WriteLine(errorMesage);
        }

    }

如果您收到错误“设备未准备好”。即您的设备尚未准备好。 如果您在没有 CD 的 CD 驱动器上尝试此代码,您将得到相同的错误:)

【讨论】:

    【解决方案3】:

    这似乎是 System.IO 的一个选项:

    DriveInfo c = new DriveInfo("C");
    long cAvailableSpace = c.AvailableFreeSpace;
    

    【讨论】:

      【解决方案4】:

      您可以使用 DriveInfo 类

      DriveInfo[] oDrvs = DriveInfo.GetDrives();
          foreach (var Drv in oDrvs) {
              if (Drv.IsReady) {
                  Console.WriteLine(Drv.Name + " " + Drv.AvailableFreeSpace.ToString);
              }
      }
      

      【讨论】:

      • 这适用于正在执行代码的机器,但对于远程服务器呢?
      • 您可以映射网络驱动器,但以编程方式执行可能有点复杂
      【解决方案5】:

      您可以使用 WMI,请参阅此相关问题:

      Best way to query disk space on remote server

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-02-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-04
        • 2011-03-13
        • 1970-01-01
        相关资源
        最近更新 更多