Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции OOP c#.doc
Скачиваний:
44
Добавлен:
22.09.2019
Размер:
3.38 Mб
Скачать

2.4. Работа с файлами и директориями

Пространство имен System.IO содержит четыре класса, предназначенные для работы с физическими файлами и каталогами на диске. Классы Directory и File выполняют операции в файловой системе при помощи статических членов, классы DirectoryInfo и FileInfo обладают схожими возможности, однако для работы требуется создании соответствующих объектов.

Рассмотрим работу с классами DirectoryInfo и FileInfo. Данные классы являются наследниками абстрактного класса FileSystemInfo. Этот класс содержит следующие основные элементы, перечисленные в таблице 14.

Таблица 14

Элементы класса FileSystemInfo

Имя элемента

Описание

Attributes

Свойство позволяет получить или установить атрибуты объекта файловой системы (тип – перечисление FileAttributes)

CreationTime

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

Exists

Свойство для чтения, проверка существования объекта файловой системы

Extension

Свойство для чтения, расширение файла

FullName

Свойство для чтения, полное имя объекта файловой системы

LastAccessTime

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

LastWriteTime

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

Name

Свойство для чтения, которое возвращает имя файла или каталога

Delete()

Метод удаляет объект файловой системы

Refresh()

Метод обновляет информацию об объекте файловой системы

Конструктор класса DirectoryInfo принимает в качестве параметра строку с именем того каталога, с которым будет производиться работа. Для указания текущего каталога используется точка (строка "."). При попытке работать с данными несуществующего каталога, генерируется исключительная ситуация. Работу с методами и свойствами класса DirectoryInfo продемонстрируем в следующем примере:

using System;

using System.IO;

class MainClass {

public static void Main() {

// Создали объект для директории

DirectoryInfo dir = new DirectoryInfo(@"C:\Temp\D");

// Выводим некоторые свойства директории

Console.WriteLine("Full Name: {0}", dir.FullName);

Console.WriteLine("Parent: {0}", dir.Parent);

Console.WriteLine("Root: {0}", dir.Root);

Console.WriteLine("Creation: {0}", dir.CreationTime);

// На экран будет выведена следующая информация:

// Full Name: C:\Temp\D

// Parent: Temp

// Root: C:\

// Creation: 01.01.1601 3:00:00

// Создаем новую поддиректорию в нашей

dir.CreateSubdirectory("Dir2");

// Создаем еще одну новую поддиректорию

dir.CreateSubdirectory(@"Dir2\SubDir2");

// Получаем массив объектов, описывающих поддиректории

DirectoryInfo[] subdirs = dir.GetDirectories();

// Получаем массив объектов,

// описывающих все файлы в директории

FileInfo[] files = dir.GetFiles();

//Можно использовать маску файлов

FileInfo[] files1 = dir.GetFiles("*.er1");

}

}

Класс FileInfo описывает файл на жестком диске и позволяет производить операции с этим файлом. Наиболее важные члены класса представлены в таблице 15:

Таблица 15

Элементы класса FileInfo

Имя элемента

Описание

AppendText()

Создает объект StreamWriter для добавления текста к файлу

CopyTo()

Копирует существующий файл в новый

Create()

Создает файл и возвращает объект FileStream для работы с файлом

CreateText()

Создает объект StreamWriter для записи текста в новый файл

Directory

Свойство для чтения, каталог файла

DirectoryName

Свойство для чтения, полный путь к файлу

Length

Свойство для чтения, размер файла в байтах

Open()

Открывает файл с указанными правами доступа на чтение, запись или совместное использование

OpenRead()

Создает объект FileStream, доступный только для чтения

OpenText()

Создает объект StreamReader для чтения информации из существующего текстового файла

OpenWrite()

Создает объект FileStream, доступный для чтения и записи

Примеры, иллюстрирующие работу с объектами-потоками, будут расссмотрены ниже. Рассмотрим пример, показывающий создание и удаление файла:

using System;

using System.IO;

class MainClass {

public static void Main() {

// Создаем объект

FileInfo file = new FileInfo(@"C:\Test.txt");

// Создаем файл (с потоком делать ничего не будем)

FileStream fs = file.Create();

// Выводим информацию

Console.WriteLine("Full Name: {0}", file.FullName);

Console.WriteLine("Atts: {0}",

file.Attributes.ToString());

Console.WriteLine("Press any key to delete file");

Console.Read();

// Закрываем поток, удаляем файл

fs.Close();

file.Delete();

}

}

Для работы с файлом можно использовать метод FileInfo.Open(), который обладает большим числом возможностей, чем метод Create(). Рассмотрим перегруженную версию метода Open(), которая содержит три параметра. Первый параметр определяет режим запроса на открытие файла. Для него используются значения из перечисления FileMode:

  • Append – Открывает файл, если он существует, и ищет конец файла. Если файл не существует, то он создается. Этот режим может использоваться только с доступом FileAccess.Write;

  • Create – Указывает на создание нового файла. Если файл существует, он будет перезаписан;

  • CreateNew – Указывает на создание нового файла. Если файл существует, генерирует исключение IOException;

  • Open – Операционная система должна открыть существующий файл;

  • OpenOrCreate – Операционная система должна открыть существующий файл или создать новый, если файл не существует;

  • Truncate – Система должна открыть существующий файл и обрезать его до нулевой длины.

Второй параметр метода Open() определяет тип доступа к файлу как к потоку байтов. Для него используются элементы перечисления FileAccess:

    • Read – Файл будет открыт только для чтения;

    • ReadWrite – Файл будет открыт и для чтения, и для записи;

    • Write – Файл открывается только для записи, то есть добавления данных.

Третий параметр определяет возможность совместного доступа к открытому файлу и представлен значениями перечисления FileShare:

  • None – Совместное использование запрещено, на любой запрос на открытие файла будет возвращено сообщение об ошибке;

  • Read – Файл могут открыть и другие пользователи, но только для чтения;

  • ReadWrite – Другие пользователи могут открыть файл для чтения и записи;

  • Write – Файл может быть открыт другими пользователями для записи.

Вот пример кода, использующего метод Open():

// Файл создается (или открывается) для чтения и записи,

// без возможности совместного использования

FileInfo file = new FileInfo(@"C:\Test.txt");

FileStream fs = file.Open(FileMode.OpenOrCreate,

FileAccess.ReadWrite,

FileShare.None);