|
При выполнении в лабораторной работе упражнения №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" или один из зависимых от них компонентов. Не удается найти указанный файл. Делаю все пунктуально. В чем может быть проблема? |
Опубликован: 05.08.2010 | Уровень: специалист | Доступ: свободно
Лекция 5:
Работа с файлами и каталогами
Упражнение 5. Работа с классом Path
Статический класс System.IO. Path содержит статические методы и поля, которые выполняют общие задачи манипуляции с путями. Путем называется строка, которая предшествует укороченному имени файла или каталога перед конечным обратным слэшем ' \ ' (разделителем составного имени).
| Метод | Описание |
|---|---|
| GetDirectoryName() | Возвращает имя каталога по полному имени файла |
| GetFullPath() | Возвращает полное имя файла по укороченному имени |
| GetFileName() | Возвращает укороченное имя файла по полному имени |
| GetFileNameWithoutExtension() | Возвращает укороченное имя файла без расширения |
| GetExtension() | Возвращает расширение файла с разделителем '.' |
| Combine() | Объединяет путь и имя файла, вставляя между ними разделитеь '\' |
| GetPathRoot() | Возвращает имя устройства, например, 'C:\' |
| GetRandomFileName() | Генерирует имя файла случайным образом базового формата DOS |
| GetTempFileName() | Генерирует заготовку полного имени временного файла для размещения в стандартном каталоге, который (каталог), возможно, еще предстоит создать |
| GetTempPath() | Генерирует заготовку полного имени каталога для размещения временных файлов, который, возможно, еще предстоит создать |
| AltDirectorySeparatorChar, DirectorySeparatorChar, PathSeparator, VolumeSeparatorChar |
Общедоступные статические поля, содержащие образцы разделителей, используемых в системе: '/' '\' ';' ':' |
-
Добавьте к решению проект ( Console Application ) с именем App5 и назначьте его стартовым. Для этого выполните через меню оболочки вначале команду File/Add/New Project, а затем сразу команду Project/Set as StartUp Project (пока созданный проект оболочка считает текущим) -
Заполните файл Program.cs следующим кодом
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using DEBUG = System.Diagnostics.Debug; // Псевдоним класса
namespace App5
{
class Program
{
static void Main(string[] args)
{
String currentDirectory = Directory.GetCurrentDirectory(); // Каталог сборки
String message = "Без использования Path\n".ToUpper();
message += "currentDirectory: " + currentDirectory + "\n";
DirectoryInfo directory = new DirectoryInfo(currentDirectory);
FileInfo[] files = directory.GetFiles("*.exe"); // Список файлов по шаблону
FileInfo file;
if (files.Length > 0)
file = files[0]; // Берем первый попавшийся для анализа
else
return; // Нечего анализировать
string fullName = file.FullName;
string name = file.Name;
message += "fullName: " + fullName + "\n";
message += string.Format("name: {0}\n", name);
message += string.Format("\nС использованием Path\n").ToUpper();
String path;
message += "path = Path.GetDirectoryName(fullName): "
+ (path = Path.GetDirectoryName(fullName)) + "\n";
message += "Path.GetFullPath(name): "
+ Path.GetFullPath(name) + "\n";
message += "Path.GetFileName(fullName): "
+ Path.GetFileName(fullName) + "\n";
message += "Path.GetFileNameWithoutExtension(fullName): "
+ Path.GetFileNameWithoutExtension(fullName) + "\n";
message += "Path.GetExtension(fullName): "
+ Path.GetExtension(fullName) + "\n";
message += "Path.Combine(path, name): "
+ Path.Combine(path, name) + "\n";
message += "Path.GetPathRoot(path): "
+ Path.GetPathRoot(path) + "\n";
message += "Path.GetPathRoot(fullName): "
+ Path.GetPathRoot(fullName) + "\n";
message += "Path.GetRandomFileName(): "
+ Path.GetRandomFileName() + "\n";
message += "Path.GetRandomFileName(): "
+ Path.GetRandomFileName() + "\n";
message += "Path.GetRandomFileName(): "
+ Path.GetRandomFileName() + "\n";
message += "Path.GetTempFileName(): "
+ Path.GetTempFileName() + "\n";
message += "Path.GetTempFileName(): "
+ Path.GetTempFileName() + "\n";
message += "Path.GetTempPath(): "
+ Path.GetTempPath() + "\n";
message += "AltDirectorySeparatorChar: '"
+ Path.AltDirectorySeparatorChar + "'\n";
message += "DirectorySeparatorChar: '"
+ Path.DirectorySeparatorChar + "'\n";
message += "PathSeparator: '"
+ Path.PathSeparator + "'\n";
message += "VolumeSeparatorChar: '"
+ Path.VolumeSeparatorChar + "'\n";
String unsafeFileName = "..\\..\\..\\" + name; // Опасное имя файла
String safeFileName = Path.GetFileName(unsafeFileName);
message += "\nОпасное имя файла: " + unsafeFileName + "\n";
message += "Безопасное имя файла: " + safeFileName + "\n";
message += "Полное опасное имя: " + Path.Combine(path, unsafeFileName) + Environment.NewLine;
message += "Полное опасное имя: " + Path.GetFullPath(Path.Combine(path, unsafeFileName)) + "\n";
message += "Полное безопасное имя: " + Path.Combine(path, safeFileName);
// Печать результатов
Console.WriteLine(message); // На консоль
DEBUG.WriteLine(message); // На панель Output
Console.ReadLine(); // Задержка окна
}
}
}-
Запустите проект - результат должен быть примерно таким
БЕЗ ИСПОЛЬЗОВАНИЯ PATH currentDirectory: E:\Tmp\FilesAndDirectory\App5\bin\Debug fullName: E:\Tmp\FilesAndDirectory\App5\bin\Debug\App5.exe name: App5.exe С ИСПОЛЬЗОВАНИЕМ PATH path = Path.GetDirectoryName(fullName): E:\Tmp\FilesAndDirectory\App5\bin\Debug Path.GetFullPath(name): E:\Tmp\FilesAndDirectory\App5\bin\Debug\App5.exe Path.GetFileName(fullName): App5.exe Path.GetFileNameWithoutExtension(fullName): App5 Path.GetExtension(fullName): .exe Path.Combine(path, name): E:\Tmp\FilesAndDirectory\App5\bin\Debug\App5.exe Path.GetPathRoot(path): E:\ Path.GetPathRoot(fullName): E:\ Path.GetRandomFileName(): epviufbp.0k1 Path.GetRandomFileName(): tyzaz4fb.so2 Path.GetRandomFileName(): ucnivb2v.idh Path.GetTempFileName(): C:\Users\CHETKOB\AppData\Local\Temp\tmp15B4.tmp Path.GetTempFileName(): C:\Users\CHETKOB\AppData\Local\Temp\tmp15B5.tmp Path.GetTempPath(): C:\Users\CHETKOB\AppData\Local\Temp\ AltDirectorySeparatorChar: '/' DirectorySeparatorChar: '\' PathSeparator: ';' VolumeSeparatorChar: ':' Опасное имя файла: ..\..\..\App5.exe Безопасное имя файла: App5.exe Полное опасное имя: E:\Tmp\FilesAndDirectory\App5\bin\Debug\..\..\..\App5.exe Полное опасное имя: E:\Tmp\FilesAndDirectory\App5.exe Полное безопасное имя: E:\Tmp\FilesAndDirectory\App5\bin\Debug\App5.exe