|
При выполнении в лабораторной работе упражнения №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 из готовой исполнимой сборки приложения. Это очень удобно при тестировании проектов.