Опубликован: 05.08.2010 | Доступ: свободный | Студентов: 2010 / 47 | Оценка: 4.50 / 4.40 | Длительность: 60:26:00
Лекция 5:

Работа с файлами и каталогами

Упражнение 3. Мониторинг дисковых устройств компьютера

Проиллюстрируем использование класса DriveInfo.

  • Добавьте к решению консольное приложение App3 и назначьте его стартовым
  • Заполните файл Program.cs следующим кодом
using System;
using System.Collections.Generic;
using System.Text;
    
using System.IO;
using DEBUG = System.Diagnostics.Debug;// Псевдоним класса
    
namespace App3
{
    class Program
    {
        static void Main(string[] args)
        {
            // Получаем список всех логических устройств компьютера
            DriveInfo[] drives = DriveInfo.GetDrives();
    
            // Перебираем список и печатаем свойства
            bool rootFlag = false; // Чтобы напечатать только раз
            foreach (DriveInfo drive in drives)
            {
                String message = String.Format("Устройство '{0}'", drive.Name);
                // Если готово, извлекаем характеристики
                if (drive.IsReady)
                {
                    message += " ГОТОВО" + Environment.NewLine;
                    if (!rootFlag)
                    {
                        message += String.Format("RootDirectory: {0}\n", drive.RootDirectory);
                        rootFlag = !rootFlag;// Отключаем
                    }
                    message += String.Format("VolumeLabel: {0}\n", drive.VolumeLabel);
                    message += String.Format("DriveType: {0}\n", drive.DriveType.ToString());
                    message += String.Format("DriveFormat: {0}\n", drive.DriveFormat);
                    message += String.Format("TotalSize: {0}\n", drive.TotalSize);
                    message += String.Format("AvailableFreeSpace: {0}\n", drive.AvailableFreeSpace);
                    message += String.Format("TotalFreeSpace: {0}\n", drive.TotalFreeSpace);
                }
                else
                    message += " НЕГОТОВО\n";
    
                DEBUG.WriteLine(message);
            }
    
            Console.ReadLine();
        }
    }
}

Обратите внимание, что псевдонимы можно определять не только для пространств имен, но и для классов. Свойство RootDirectory экземпляра DriveInfo для любого устройства возвращает одно и то же значение, поэтому мы используем его только раз (чтобы не мешало). Если мы хотим исследовать только одно устройство и знаем его имя, то можно создать объект DriveInfo с помощью параметризованного конструктора, указав в качестве аргумента строку с именем, например, так

DriveInfo drive = new DriveInfo("C");

Имя устройства задается только символом от a до z в любом регистре и без дополнительных символов слэша и двоеточия. А далее все равно нужно проверить его готовность IsReady, прежде чем обращаться к другим свойствам.

  • Удостовертесь, что включен режим Debug оболочки (выпадающий список над рабочей областью)
  • Запустите проект и откройте панель Output. На моем компьютере получился такой результат
Устройство 'C:\' ГОТОВО
RootDirectory: C:\
VolumeLabel: 18125
DriveType: Fixed
DriveFormat: NTFS
TotalSize: 31457275904
AvailableFreeSpace: 473616384
TotalFreeSpace: 473616384
	
Устройство 'D:\' ГОТОВО
VolumeLabel: 
DriveType: Removable
DriveFormat: FAT32
TotalSize: 261105664
AvailableFreeSpace: 244381696
TotalFreeSpace: 244381696
	
Устройство 'E:\' ГОТОВО
VolumeLabel: Data
DriveType: Fixed
DriveFormat: NTFS
TotalSize: 462356992000
AvailableFreeSpace: 425508450304
TotalFreeSpace: 425508450304
	
Устройство 'F:\' ГОТОВО
VolumeLabel: ГАИ - 24.01.2010
DriveType: CDRom
DriveFormat: CDFS
TotalSize: 161966080
AvailableFreeSpace: 0
TotalFreeSpace: 0
	
Устройство 'G:\' НЕГОТОВО
	
Устройство 'H:\' НЕГОТОВО
	
Устройство 'I:\' НЕГОТОВО
	
Устройство 'J:\' НЕГОТОВО
	
Устройство 'K:\' ГОТОВО
VolumeLabel: 
DriveType: Removable
DriveFormat: FAT32
TotalSize: 31994216448
AvailableFreeSpace: 7246184448
TotalFreeSpace: 7246184448

Вывод информации мы организовали в панель Output оболочки, поэтому консольное окно будет пустым.

  • Включите режим Release оболочки и повторите запуск проекта

Мы видим, что отладочный код работает только в режиме Debug и автоматически исключается компилятором в режиме Release из готовой исполнимой сборки приложения. Это очень удобно при тестировании проектов.

Алексей Бабушкин
Алексей Бабушкин

При выполнении в лабораторной работе упражнения №1 , а именно при выполнении нижеследующего кода:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using Microsoft.Xna.Framework.Graphics;

   

namespace Application1

{

    public partial class MainForm : Form

    {

        // Объявим поле графического устройства для видимости в методах

        GraphicsDevice device;

   

        public MainForm()

        {

            InitializeComponent();

   

            // Подпишемся на событие Load формы

            this.Load += new EventHandler(MainForm_Load);

   

            // Попишемся на событие FormClosed формы

            this.FormClosed += new FormClosedEventHandler(MainForm_FormClosed);

        }

   

        void MainForm_FormClosed(object sender, FormClosedEventArgs e)

        {

            //  Удаляем (освобождаем) устройство

            device.Dispose();

            // На всякий случай присваиваем ссылке на устройство значение null

            device = null;       

        }

   

        void MainForm_Load(object sender, EventArgs e)

        {

            // Создаем объект представления для настройки графического устройства

            PresentationParameters presentParams = new PresentationParameters();

            // Настраиваем объект представления через его свойства

            presentParams.IsFullScreen = false; // Включаем оконный режим

            presentParams.BackBufferCount = 1;  // Включаем задний буфер

                                                // для двойной буферизации

            // Переключение переднего и заднего буферов

            // должно осуществляться с максимальной эффективностью

            presentParams.SwapEffect = SwapEffect.Discard;

            // Устанавливаем размеры заднего буфера по клиентской области окна формы

            presentParams.BackBufferWidth = this.ClientSize.Width;

            presentParams.BackBufferHeight = this.ClientSize.Height;

   

            // Создадим графическое устройство с заданными настройками

            device = new GraphicsDevice(GraphicsAdapter.DefaultAdapter, DeviceType.Hardware,

                this.Handle, presentParams);

        }

   

        protected override void OnPaint(PaintEventArgs e)

        {

            device.Clear(Microsoft.Xna.Framework.Graphics.Color.CornflowerBlue);

   

            base.OnPaint(e);

        }

    }

}

Выбрасывается исключение:

Невозможно загрузить файл или сборку "Microsoft.Xna.Framework, Version=3.0.0.0, Culture=neutral, PublicKeyToken=6d5c3888ef60e27d" или один из зависимых от них компонентов. Не удается найти указанный файл.

Делаю все пунктуально. В чем может быть проблема?