Чтение информации о дисках

79

Помимо работы с файлами и каталогами, в .NET Framework предоставляется возможность читать информацию об указанном диске. Для этого предусмотрен класс DriveInfo. Этот класс умеет производить сканирование системы и составлять список всех доступных в ней дисков, а также детальные сведения о любом из них.

Рассмотрим пример применения класса DriveInfo, создав простое приложение WPF, которое будет отображать перечень всех доступных дисков на компьютере и предоставлять подробную информацию о любом из них. Приложение должно включать в себя простой элемент управления ListBox. Используйте следующую разметку:

<Window x:Class="DriverInfo.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Информация о дисках" Height="350" Width="525" Loaded="Window_Loaded">
    <StackPanel Margin="5">
        <TextBlock>Найденные диски:</TextBlock>
        <ListBox x:Name="lbx" SelectionChanged="lbx_SelectionChanged" Margin="0,5,0,5"
                 Padding="5"></ListBox>
        <TextBlock>Информация о диске: </TextBlock>
        <TextBox TextWrapping="Wrap" x:Name="txt" VerticalScrollBarVisibility="Auto"
                 Padding="5" Margin="0,5,0,5" MaxHeight="150"></TextBox>
    </StackPanel>
</Window>

После подготовки код формы будет содержать обработчики двух событий: загрузка окна и выбор пользователем в списке определенного диска:

using System;
using System.IO;
using System.Windows;
using System.Windows.Controls;

namespace DriverInfo
{
    /// 
    /// Логика взаимодействия для MainWindow.xaml
    /// 
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            DriveInfo[] di = DriveInfo.GetDrives();
            foreach (DriveInfo d in di)
                lbx.Items.Add(d.Name);
        }

        private void lbx_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            txt.Text = "";
            DriveInfo di = new DriveInfo(lbx.SelectedItem.ToString());
            txt.Text = "Свободное пространство: " + di.AvailableFreeSpace / 1024 / 1024 + "Mb\n"
                + "Общий размер: " + di.TotalSize + "\n"
                + "Формат устройства: " + di.DriveFormat + "\n"
                + "Тип устройства: " + di.DriveType + "\n"
                + "Готовность: " + di.IsReady + "\n"
                + "Имя " + di.Name
                + "\nКорневой каталог: " + di.RootDirectory + 
                "\nМетка тома: " + di.VolumeLabel;
        }
    }
}
Информация о дисках

Здесь первым делом с помощью ключевого слова using добавляется пространство имен System.IO. Затем в рамках события Window_Loaded используется класс DriveInfo для получения списка всех доступных дисков в системе. Получается этот список за счет создания массива объектов DriveInfo и его заполнения методом DriveInfo.GetDrives(). Далее с помощью цикла foreach производится проход по всем обнаруженным дискам с заполнением элемента ListBox результатами.

Пользователь может выбирать в списке любой диск. После выбора детальные сведения о диске появляются в текстовом поле.

Пройди тесты
Лучший чат для C# программистов