Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Работа с объектами файловой системы






В пространстве имён System.IO доступно несколько классов для работы с объектами файловой системы – дисками, каталогами, файлами.

Класс DriveInfo инкапсулирует информацию о диске. Он имеет статический метод GetDrives() для получения массива объектов DriveInfo, соответствующих дискам операционной системы. В примере кода демонстрируется работа с элементами класса DriveInfo.

var allDrives = DriveInfo.GetDrives();

foreach (var d in allDrives)

{

Console.WriteLine(" Drive name: {0}", d.Name);

Console.WriteLine(" Drive type: {0}", d.DriveType);

if (! d.IsReady) continue;

Console.WriteLine(" Volume Label: {0}", d.VolumeLabel);

Console.WriteLine(" File system: {0}", d.DriveFormat);

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

Console.WriteLine(" Total size: {0}", d.TotalSize);

Console.WriteLine(" Free size: {0}", d.TotalFreeSpace);

Console.WriteLine(" Available: {0}", d.AvailableFreeSpace);

}

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

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

Таблица 11

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

Имя элемента Описание
Attributes Свойство позволяет получить или установить атрибуты объекта файловой системы (тип – перечисление FileAttributes)
CreationTime Время создания объекта файловой системы
Exists Свойство для чтения, проверка существования объекта файловой системы
Extension Свойство для чтения, расширение файла
FullName Свойство для чтения, полное имя объекта файловой системы
LastAccessTime, LastAccessTimeUtc Время последнего доступа к объекту файловой системы (локальное или всемирное координированное)
LastWriteTime, LastWriteTimeUtc Времени последней записи для объекта файловой системы (локальное или всемирное координированное)
Name Свойство для чтения; имя файла или каталога
Delete() Метод удаляет объект файловой системы
Refresh() Метод обновляет информацию об объекте файловой системы

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

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

 

// выводим некоторые свойства каталога C: \Temp

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

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

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

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

 

// создаём подкаталог

dir.CreateSubdirectory(" Subdir");

Класс DirectoryInfo обладает двумя наборам методов для получения дочерних подкаталогов, файлов, или объектов FileSystemInfo. Методы вида GetЭлементы() выполняются немедленно и возвращают массив. Методы вида EnumerateЭлементы() используют отложенное выполнение и возвращают перечислитель:

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

 

// получаем файлы по маске из всех подкаталогов

FileInfo[] f = dir.GetFiles(" *.txt", SearchOption.AllDirectories);

 

// получаем файлы, используя отложенное выполнение

foreach (var fileInfo in dir.EnumerateFiles())

Console.WriteLine(fileInfo.Name);

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

Таблица 12

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

Имя элемента Описание
AppendText() Создаёт объект StreamWriter для добавления текста к файлу
CopyTo() Копирует существующий файл в новый файл
Create() Создаёт файл и возвращает объект FileStream для работы
CreateText() Создаёт объект StreamWriter для записи текста в новый файл
Decrypt() Дешифрует файл, зашифрованный методом Encrypt()
Directory Свойство для чтения, каталог файла
DirectoryName Свойство для чтения, полный путь к файлу
Encrypt() Шифрует файл с учётом системных данных текущего пользователя
IsReadOnly Булево свойство. Указывает, является ли файл файлом только для чтения
Length Свойство для чтения, размер файла в байтах
MoveTo() Перемещает файл (возможно, с переименованием)
Open() Открывает файл с указанными правами доступа
OpenRead() Создаёт объект FileStream, доступный только для чтения
OpenText() Создаёт объект StreamReader для чтения информации из текстового файла
OpenWrite() Создаёт объект FileStream, доступный для чтения и записи

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

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

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

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

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

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

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

Рис. 4 показывает выбор FileMode в зависимости от задачи.

Рис. 4. Выбор значения FileMode.

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

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

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

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

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

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

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

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

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

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

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

FileStream fs = file.Open(FileMode.OpenOrCreate,

FileAccess.ReadWrite, FileShare.None);

Кроме методов класса FileInfo, статический класс File обладает методами, позволяющими легко прочитать и записать информацию, содержащуюся в файле определённого типа:

File.AppendAllLines() – добавляет к текстовому файлу набор строк;

File.AppendAllText() – добавляет строку к текстовому файлу;

File.ReadAllBytes() – возвращает содержимое файла как массив байтов;

File.ReadAllLines() – читает текстовый файл как массив строк;

File.ReadLines() – читает файл как коллекцию строк, используя отложенные вычисления;

File.ReadAllText() – читает содержимое текстового файла как строку;

File.WriteAllBytes() – записывает в файл массив байтов;

File.WriteAllLines() – записывает в файл массив или коллекцию строк;

File.WriteAllText() – записывает текстовый файл как одну строку;

Статический класс Path предназначен для работы с именами файлов и путями в файловой системе. Методы этого класса позволяют выделить имя файла из полного пути, скомбинировать для получения пути имя файла и имя каталога. Также класс Path обладает методами, генерирующими имя для временного файла или каталога. Для поиска стандартных папок (например, My Documents) следует применять метод GetFolderPath() класса System.Environment, указав в качестве аргумента одно из значений перечисления Environment.SpecialFolder.

string tempFile = Path.GetTempFileName(); // c: \Temp\tmp144A.tmp

string ext = Path.GetExtension(" info.txt"); //.txt

string win =

Environment.GetFolderPath(Environment.SpecialFolder.Windows);

Класс FileSystemWatcher позволяет производить мониторинг активности выбранного каталога. У этого класса определены события, которые генерируются, когда файлы или подкаталоги создаются, удаляются, модифицируются, или изменяются их атрибуты. Применение класса FileSystemWatcher демонстрирует следующий фрагмент кода:

// создаём и настраиваем объект FileSystemWatcher

var watcher = new FileSystemWatcher

{

Path = @" C: /Temp",

Filter = " *.txt",

IncludeSubdirectories = true

};

 

// устанавливаем обработчики событий

FileSystemEventHandler handler = (o, e) =>

Console.WriteLine(" File {0} was {1}", e.FullPath, e.ChangeType);

watcher.Created += handler;

watcher.Changed += handler;

watcher.Deleted += handler;

watcher.Renamed += (o, e) =>

Console.WriteLine(" Renamed: {0} -> {1}", e.OldFullPath, e.FullPath);

watcher.Error += (o, e) =>

Console.WriteLine(" Error: {0}", e.GetException().Message);

 

// запускаем мониторинг

watcher.EnableRaisingEvents = true;

Console.WriteLine(" Monitoring is on. Press < enter> to exit");

Console.ReadLine();

 

// останавливаем мониторинг, уничтожаем FileSystemWatcher

watcher.Dispose();






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.