Как получить информацию о диске на C#?

Я хочу получить доступ к информации о логических дисках на моем компьютере с помощью C#. Как мне этого добиться? Спасибо!

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
48
0
57 528
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Ответ принят как подходящий

Для получения большей информации вы можете использовать класс 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);
        }
    }
}

Как насчет информации о диске на машине, отличной от локальной?

flipdoubt 05.01.2009 15:13

Для сетевых дисков это работает, тип диска отображается как «Сеть». Что касается удаленных запросов, я думаю, вам следует задать другой вопрос.

Vinko Vrsalovic 05.01.2009 16:19

Проверьте класс DriveInfo и посмотрите, содержит ли он всю необходимую информацию.

Используйте класс System.IO.DriveInfo http://msdn.microsoft.com/en-us/library/system.io.driveinfo.aspx

А как насчет подключенных томов, на которых нет буквы диска?

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 в новом ManagementObjectSearcher ("Select * from Win32_Volume") .Get ()) {if (volume ["FreeSpace"]! = Null) {Console.WriteLine ("{0} = {1} из {2} ", volume [" Name "], ulong.Parse (volume [" FreeSpace "]. ToString ()) .ToString (" #, ## 0 "), ulong.Parse (volume [ «Емкость»]. ToString ()) .ToString («#, ## 0»)); }}}

Foozinator 06.09.2009 10:09

Если вы хотите получить информацию о одиночный / конкретный привод на вашем локальном компьютере. Вы можете сделать это следующим образом, используя класс 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;

В ASP .NET Core 3.1, если вы хотите получить код, который работает как в Windows, так и в Linux, вы можете получить свои диски следующим образом:

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

Если вы не примените оба варианта, вы получите много дисков, если запустите код в Linux (например, «/ dev», «/ sys», «/ etc / hosts» и т. д.).

Это особенно полезно при разработке приложения для работы в контейнере Linux Docker.

Другие вопросы по теме