如何在 C# 中检索磁盘信息?

Posted

技术标签:

【中文标题】如何在 C# 中检索磁盘信息?【英文标题】:How do I retrieve disk information in C#? 【发布时间】:2010-09-29 14:00:31 【问题描述】:

我想使用 C# 访问计算机上逻辑驱动器上的信息。我应该如何做到这一点?谢谢!

【问题讨论】:

【参考方案1】:

对于大多数信息,您可以使用DriveInfo 类。

using System;
using System.IO;

class Info 
    public static void Main() 
        DriveInfo[] drives = DriveInfo.GetDrives();
        foreach (DriveInfo drive in drives) 
            //There are more attributes you can use.
            //Check the MSDN link for a complete example.
            Console.WriteLine(drive.Name);
            if (drive.IsReady) Console.WriteLine(drive.TotalSize);
        
    

【讨论】:

本地机器以外的机器上的驱动器信息呢? 对于网络安装的驱动器,此方法有效,将驱动器类型报告为“网络”。对于远程查询,我认为你应该问一个不同的问题。【参考方案2】:

如果您想在本地计算机上获取单个/特定驱动器的信息。您可以使用DriveInfo 类进行如下操作:

//C Drive Path, this is useful when you are about to find a Drive root from a Location Path.
string path = "C:\\Windows";

//Find its root directory i.e "C:\\"
string rootDir = Directory.GetDirectoryRoot(path);

//Get all information of Drive i.e C
DriveInfo driveInfo = new DriveInfo(rootDir); //you can pass Drive path here e.g   DriveInfo("C:\\")

long availableFreeSpace = driveInfo.AvailableFreeSpace;
string driveFormat = driveInfo.DriveFormat;
string name = driveInfo.Name;
long totalSize = driveInfo.TotalSize;

【讨论】:

【参考方案3】:

没有驱动器号的已安装卷怎么办?

foreach( ManagementObject volume in 
             new ManagementObjectSearcher("Select * from Win32_Volume" ).Get())

  if( volume["FreeSpace"] != null )
  
    Console.WriteLine("0 = 1 out of 2",
                  volume["Name"],
                  ulong.Parse(volume["FreeSpace"].ToString()).ToString("#,##0"),
                  ulong.Parse(volume["Capacity"].ToString()).ToString("#,##0"));
  

【讨论】:

我自己发现的:''foreach(ManagementObject volume in new ManagementObjectSearcher("Select * from Win32_Volume").Get()) if(volume["FreeSpace"] != null ) Console .WriteLine("0 = 1 out of 2", volume["Name"], ulong.Parse(volume["FreeSpace"].ToString() ).ToString("#,##0" ), ulong.Parse(volume["Capacity"].ToString()).ToString("#,##0")); 【参考方案4】:

使用 System.IO.DriveInfo 类 http://msdn.microsoft.com/en-us/library/system.io.driveinfo.aspx

【讨论】:

【参考方案5】:

检查DriveInfo 类,看看它是否包含您需要的所有信息。

【讨论】:

【参考方案6】:

在 ASP .NET Core 3.1 中,如果您想获得在 windows 和 linux 上都可以运行的代码,您可以按如下方式获取驱动器:

var drives = DriveInfo
    .GetDrives()
    .Where(d => d.DriveType == DriveType.Fixed)
    .Where(d => d.IsReady)
    .ToArray();

如果你不同时应用这两个 where,如果你在 linux 中运行代码,你会得到很多驱动器(例如“/dev”、“/sys”、“/etc/hosts”等)。

这在开发应用程序以在 Linux Docker 容器中运行时特别有用。

【讨论】:

以上是关于如何在 C# 中检索磁盘信息?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ASP.NET C# 中检索程序集信息窗口的文件版本 [重复]

如何在 C# 中从数据表中查询和检索信息

如何从 C# 中的 Stripe Subscription 对象中检索产品信息?

如何在 c# 中使用 user32.dll 从类“ThunderRT6ListBox”的窗口中检索值

如何在 C# 中使用正则表达式检索选定的文本?

如何在c#中检索字符串formData js