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

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

Упражнение 5. Работа с классом Path

Статический класс System.IO. Path содержит статические методы и поля, которые выполняют общие задачи манипуляции с путями. Путем называется строка, которая предшествует укороченному имени файла или каталога перед конечным обратным слэшем ' \ ' (разделителем составного имени).

Таблица 18.13. Статические методы и поля класса 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
Алексей Бабушкин
Алексей Бабушкин

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

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