При выполнении в лабораторной работе упражнения №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" или один из зависимых от них компонентов. Не удается найти указанный файл. Делаю все пунктуально. В чем может быть проблема? |
Работа с файлами и каталогами
Упражнение 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 из готовой исполнимой сборки приложения. Это очень удобно при тестировании проектов.