Класс DirectoryInfo
Данный класс наследует члены класса FileSystemInfo и содержит дополнительный набор членов, которые предназначены для создания, перемещения, удаления, получения информации о каталогах и подкаталогах в файловой системе. Наиболее важные члены класса содержатся в следующей таблице:
Член | Описание |
Create() CreateSubDirectory() | Создают каталог (или подкаталог) по указанному пути в файловой системе |
Delete() | Удаляет пустой каталог |
GetDirectories() | Позволяет получить доступ к подкаталогам текущего каталога (в виде массива объектов DirectoryInfo) |
GetFiles() | Позволяет получить доступ к файлам текущего каталога (в виде массива объектов FileInfo) |
MoveTo() | Перемещает каталог и все его содержимое на новый адрес в файловой системе |
Parent | Возвращает родительский каталог в иерархии файловой системы |
Работа с типом DirectoryInfo начинается с того, что мы создаем экземпляр класса (объект), указывая при вызове конструктора в качестве параметра путь к нужному каталогу. Если мы хотим обратиться к текущему каталогу (то есть каталогу, в котором в настоящее время производится выполнение приложения), вместо параметра используется обозначение ".". Например:
// Создаем объект DirectoryInfo, которому будет обращаться к текущему каталогуDirectoryInfo dir1 = new DirectoryInfo(".");// Создаем объект DirectoryInfo, которому будет обращаться к каталогу d:\primDirectoryInfo dir2 = new DirectoryInfo(@"d:\prim");Если мы попытаемся создать объект DirectoryInfo, связав его с несуществующим каталогом, то будет сгенерировано исключение System.IO.DirectoryNotFoundException. Если же все нормально, то мы сможем получить доступ к данному каталогу. В примере, который приведен ниже, мы создаем объект DlrectoryInfo, который связан с каталогом d:\prim, и выводим информацию о данном каталоге:
using System;using System.Text;using System.IO; namespace MyProgram{ class Program { static void Main(string[] args) { DirectoryInfo dir = new DirectoryInfo(@"d:\prim"); Console.WriteLine("***** "+dir.Name+" *****"); Console.WriteLine("FullName: {0}", dir.FullName); Console.WriteLine("Name: {0}", dir.Name); Console.WriteLine("Parent: {0}", dir.Parent); Console.WriteLine("Creation: {0}", dir.CreationTime); Console.WriteLine("Attributes: {0}", dir.Attributes.ToString()); Console.WriteLine("Root: {0}", dir.Root); } }}Свойство Attributes позволяет получить информацию об атрибутах объекта файловой системы. Возможные значения данного свойства приведены в следующей таблице:
Значение | Описание |
Archive | Этот атрибут используется приложениями при проведении резервного копирования, а в некоторых случаях - удаления старых файлов |
Compressed | Определяет, что файл является сжатым |
Directory | Определяет, что объект файловой системы является каталогом |
Encrypted | Определяет, что файл является зашифрованным |
Hidden | Определяет, что файл является скрытым (такой файл не будет выводиться при обычном просмотре каталога) |
Normal | Определяет, что файл находится в обычном состоянии и для него установлены любые другие атрибуты. Этот атрибут не может использоваться с другими атрибутами |
Offline | Файл (расположенный на сервере) кэширован в хранилище off-line на клиентском компьютере. Возможно, что данные этого файла уже устарели |
Readonly | Файл доступен только для чтения |
System | Файл является системным (то есть файл является частью операционной системы или используется исключительно операционной системой) |
Через DirectoryInfo можно не только получать доступ к информации о текущем каталоге, но получить доступ к информации о его подкаталогах:
class Program{ static void printDirect( DirectoryInfo dir) { Console.WriteLine("***** "+dir.Name+" *****"); Console.WriteLine("FullName: {0}", dir.FullName); Console.WriteLine("Name: {0}", dir.Name); Console.WriteLine("Parent: {0}", dir.Parent); Console.WriteLine("Creation: {0}", dir.CreationTime); Console.WriteLine("Attributes: {0}", dir.Attributes.ToString()); Console.WriteLine("Root: {0}", dir.Root); } static void Main(string[] args) { DirectoryInfo dir = new DirectoryInfo(@"d:\prim"); printDirect(dir); DirectoryInfo[] subDirects = dir.GetDirectories(); Console.WriteLine("Найдено {0} подкаталогов", subDirects.Length); foreach (DirectoryInfo d in subDirects) { printDirect(d); } }}Задание. Преобразуйте метод printDirect в рекурсивный метод таким образом, чтобы можно было просмотреть информацию о всех подкаталогах текущего каталога, независимо от уровня вложенности.
Метод CreateSubdirectory() позволяет создать в выбранном каталоге как единственный подкаталог, так и множество подкаталогов (в том числе, и вложенных друг в друга). Создадим в каталоге несколько дополнительных подкаталогов:
DirectoryInfo dir = new DirectoryInfo(@"d:\prim");dir.CreateSubdirectory("doc"); //создали подкаталогdir.CreateSubdirectory(@"book\2008"); //создали вложенный подкаталогЗадание. Создайте вложенный подкаталог best\2008 для каталога d:\prim\bmp.
Метод MoveTo() позволяет переместить текущий каталог по заданному в качестве параметра адресу. При этом возможно произвести переименование каталога. Например:
DirectoryInfo dir = new DirectoryInfo(@"d:\prim\bmp");dir.MoveTo(@"d:\prim\letter\bmp");В данном случае каталог bmp перемещается в по адресу d:\prim\letter\bmp. Так как имя перемещаемого каталога совпадает с крайним правым именем в адресе нового местоположения каталога, то переименования не происходит. Следующий пример позволит нам переименовать текущий каталог:
DirectoryInfo dir = new DirectoryInfo(@"d:\prim\letter");dir.MoveTo(@"d:\prim\archive");Класс Directory
Работать с каталогами файловой системы компьютера можно и при помощи класса Directory, функциональные возможности которого во многом совпадают с возможностями DirectoryInfo. Но члены данного класса реализованы статически, поэтому для их использования нет необходимости создавать объект.
Рассмотрим работу с методами данного класса на примерах.
Замечание. Удалите с диска d измененную папку prim. И еще раз скопируйте ее исходную версию из раздела 12 данного электронного учебника.
Directory.CreateDirectory(@"d:\prim\2008");//создали подкаталог 2008Directory.Move(@"d:\prim\bmp", @"d:\prim\2008\bmp");//перенесли каталог bmp в каталог 2008Directory.Move(@"d:\prim\letter", @"d:\prim\archives");//переименовали каталог letter в archivesЗамечания.
- Удаление каталога возможно только тогда, когда он пуст.
- На практике комбинируют использование классов Directory и DirectoryInfo.
Работа с файлами
Класс Filelnfo
Класс Filelnfo предназначен для организации доступа к физическому файлу, который содержится на жестком диске компьютера. Он позволяет получать информацию об этом файле (например, о времени его создания, размере, атрибутах и т. п.), а также производить различные операции, например, по созданию файла или его удалению. Класс FileInfo наследует члены класса FileSystemInfo и содержит дополнительный набор членов, который приведен в следующей таблице:
Член | Описание |
AppendText() | Создает объект StreamWriter для добавления текста к файлу |
CopyTo() | Копирует уже существующий файл в новый файл |
Create() | Создает новый файл и возвращает объект FileStream для взаимодействия с этим файлом |
CreateText() | Создает объект StreamWriter для записи текстовых данных в новый файл |
Delete() | Удаляет файл, которому соответствует объект FileInfo |
Directory | Возвращает каталог, в котором расположен данный файл |
DirectoryName | Возвращает полный путь к данному файлу в файловой системе |
Length | Возвращает размер файла |
MoveTo() | Перемещает файл в указанное пользователем место (этот метод позволяет одновременно переименовать данный файл) |
Name | Позволяет получить имя файла |
Ореn() | Открывает файл с указанными пользователем правами доступа на чтение, запись или совместное использование с другими пользователями |
OpenRead() | Создает объект FileStream, доступный только для чтения |
OpenText() | Создает объект StreamReader (о нем также будет рассказано ниже), который позволяет считывать информацию из существующего текстового файла |
OpenWrite() | Создает объект FileStream, доступный для чтения и записи |
Как мы видим, большинство методов FileInfo возвращает объекты (FIleStream, StreamWriter, StreamReader и т. п.), которые позволяют различным образом взаимодействовать с файлом, например, производить чтение или запись в него. Приемы работы с данными потоками нам уже известны. Поэтому рассмотрим другие возможности класса FileInfo.
using System;using System.Text;using System.IO; //для работы с файловым вводом-выводомusing System.Text.RegularExpressions; namespace MyProgram{ class Program { static void Main() { //создаем новый файл и связываем с ним строковый поток FileInfo f = new FileInfo("text.txt"); StreamWriter fOut = new StreamWriter(f.Create()); //записываем в файл данные и закрываем строковый поток,// при этом связь с физическим файлом для f не рвется fOut.WriteLine("ОДИН ДВА ТРИ..."); fOut.Close(); //получаем информацию о файле Console.WriteLine("*******"+f.Name File Inf+"**************"); Console.WriteLine("File size: {0}", f.Length); Console.WriteLine("Creation: {0}", f.CreationTime); Console.WriteLine("Attributes: {0}", f.Attributes.ToString()); } }}Замечание. Еще раз удалите с диска d измененную папку prim, затем скопирует ее исходную версию из раздела 12 данного электронного учебника.
Рассмотрим следующий пример:
static void Main() { FileInfo f = new FileInfo(@"d:\prim\letter\letter1.txt"); f.CopyTo(@"d:\prim\bmp\letter.txt"); Directory.CreateDirectory(@"d:\prim\archives"); f.MoveTo(@"d:\prim\archives\letter1.txt"); f = new FileInfo(@"d:\prim\letter\letter2.txt"); f.Delete(); }Задание. Посмотрите, что произойдет, если запустить эту программу еще раз. Дайте этому объяснение.
Рассмотрим еще один пример по удалению файлов:
static void printFile( FileInfo file){ Console.WriteLine("***** "+file.Name+" *****"); Console.WriteLine("File size: {0}", file.Length); Console.WriteLine("Creation: {0}", file.CreationTime); Console.WriteLine("Attributes: {0}", file.Attributes.ToString());} static void Main(string[] args){ DirectoryInfo dir = new DirectoryInfo(@"d:\prim\bmp"); FileInfo[] files = dir.GetFiles(); if (files.Length!=0) { Console.WriteLine("Найдено {0} файла", files.Length); foreach (FileInfo f in files) { printFile(f); f.Delete(); } Console.WriteLine("\nТеперь в каталоге содержится {0} файлов и можно его удалить", dir.GetFiles().Length); dir.Delete(); }}Класс File
Доступ к физическим файлам можно получать и через статические методы класса File. Большинство методов объекта Fileinfo представляют в этом смысле зеркальное отражение методов объекта File.
Замечание. В последний раз удалите с диска d измененную папку prim, затем скопирует ее исходную версию из раздела 12данного электронного учебника.
static void Main(string[] args){ File.Copy(@"d:\prim\letter\letter1.txt",@"d:\prim\bmp\letter1.txt"); Directory.CreateDirectory(@"d:\prim\archives"); File.Move(@"d:\prim\letter\letter1.txt",@"d:\prim\archives\letter1.txt"); File.Delete(@"d:\prim\letter\letter2.txt"); Directory.Delete(@"d:\prim\letter");}Имеет прямой смысл использовать статический класс File, когда требуется осуществить единственный вызов метода на объект. В этом случае вызов будет выполнен быстрее, поскольку .NET Framework не придется проходить через процедуру создания экземпляра нового объекта с последующим вызовом метода. Однако если приложение осуществляет несколько операций над файлом, то более разумным представляется создать экземпляр объекта FileInfo и использовать его методы. Это позволит сэкономить определенное время, поскольку объект будет заранее настроен на нужный файл в файловой системе, в то время как статическому классу придется каждый раз осуществлять его поиск заново.
Аналогичное правило действует и при выборе между классами Directory и DirectoryInfo.
Практикум
Программным путем:
- В папке С:\temp создайте папки К1 и К2.
- В папке К1:
- создайте файл t1.txt, в который запишите следующий текст :
- создайте файл t2.txt, в который запишите следующий текст:
- В папке К2 создайте файл t3.txt, в который перепишите вначале текст из файла t1.txt, а затем из t2.txt
- Выведите развернутую информацию о созданных файлах.
- Файл t2.txt перенесите в папку K2.
- Файл t1.txt скопируйте в папку K2.
- Папку K2 переименуйте в ALL, а папку K1 удалите.
- Вывести полную информацию о файлах папки All.
<== предыдущая лекция | | | следующая лекция ==> |
Культурный концепт и языковое значение | | | Тарифная система оплаты труда |
Дата добавления: 2017-03-29; просмотров: 531;