Класс DirectoryInfo

Данный класс наследует члены класса FileSystemInfo и содержит дополнительный набор членов, которые предназначены для создания, перемещения, удаления, получения информации о каталогах и подкаталогах в файловой системе. Наиболее важные члены класса содержатся в приложении 9.

Работа с типом DirectoryInfo начинается с того, что мы создаем экземпляр класса (объект), указывая при вызове конструктора в качестве параметра путь к нужному каталогу. Если мы хотим обратиться к текущему каталогу (то есть каталогу, в котором в настоящее время производится выполнение приложения), вместо параметра используется обозначение ".".

Пример:

/* Создаем объект DirectoryInfo, которому будет обращаться к текущему каталогу*/ DirectoryInfo dir1 = new DirectoryInfo(".");

// Создаем объект DirectoryInfo, которому будет обращаться к каталогу d:\prim

DirectoryInfo 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 позволяет получить информацию об атрибутах объекта файловой системы. Возможные значения данного свойства приведены в приложении 9.

Через DirectoryInfo можно не только получать доступ к информации о текущем каталоге, но получить доступ к информации о его подкаталогах:

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);

}

Метод CreateSubdirectory()позволяет создать в выбранном каталоге как единственный подкаталог, так и множество подкаталогов (в том числе, и вложенных друг в друга). Создадим в каталоге несколько дополнительных подкаталогов:

DirectoryInfo dir = new DirectoryInfo(@»d:\prim»);

dir.CreateSubdirectory(«doc»); //создали подкаталог

//создали вложенный подкаталог

dir.CreateSubdirectory(@»book\2008»);

Метод MoveTo() позволяет переместить текущий каталог по заданному в качестве параметра адресу. При этом возможно произвести переименование каталога. Например:

DirectoryInfo dir = new DirectoryInfo(@»d:\prim\bmp»);

dir.(@»d:\prim\letter\bmp»);

В данном случае каталог bmp перемещается в по адресу d:\prim\letter\bmp. Так как имя перемещаемого каталога совпадает с крайним правым именем в адресе нового местоположения каталога, то переименования не происходит. Следующий пример позволит нам переименовать текущий каталог:

DirectoryInfo dir = new DirectoryInfo(@»d:\prim\letter»);

dir.MoveTo(@»d:\prim\archive»);

Класс Directory

Работать с каталогами файловой системы компьютера можно и при помощи класса Directory, функциональные возможности которого во многом совпадают с возможностями DirectoryInfo. Но члены данного класса реализованы статически, поэтому для их использования нет необходимости создавать объект.

Рассмотрим работу с методами данного класса на примерах.

//создали подкаталог 2008

Directory.CreateDirectory(@"d:\prim\2008");

//перенесли каталог bmp в каталог 2008

Directory.Move(@"d:\prim\bmp", @"d:\prim\2008\bmp");

//переименовали каталог letter в archives

Directory.Move(@"d:\prim\letter", @"d:\prim\archives");

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

Класс Filelnfo

Класс Filelnfo предназначен для организации доступа к физическому файлу, который содержится на жестком диске компьютера. Он позволяет получать информацию об этом файле (например, о времени его создания, размере, атрибутах и т. п.), а также производить различные операции, например, по созданию файла или его удалению. Класс FileInfo наследует члены класса FileSystemInfo и содержит дополнительный набор членов, который приведен в приложении 9.

Как мы видим, большинство методов FileInfo возвращает объекты (FIleStream, StreamWriter, StreamReader и т. п.), которые позволяют различным образом взаимодействовать с файлом, например, производить чтение или запись в него. Приемы работы с данными потоками нам уже известны. Поэтому рассмотрим другие возможности класса FileInfo.

using System;

using System.Text;

using System.IO; //для работы с файловым вводом-выводом

using System.Text.RegularExpressions;

...

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());

}

Рассмотрим следующий пример:

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:"+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.

static void Main(string[] args)

{

File.Copy(@"d:\letter\letter1.txt",@"d:\bmp\letter1.txt");

Directory.CreateDirectory(@"d:\prim\archives");

File.Move(@"d:\letter\letter1.txt",@"d:\archives\letter1.txt");

File.Delete(@"d:\prim\letter\letter2.txt");

Directory.Delete(@"d:\prim\letter");

}

Имеет прямой смысл использовать статический класс File, когда требуется осуществить единственный вызов метода на объект. В этом случае вызов будет выполнен быстрее, поскольку .NET Framework не придется проходить через процедуру создания экземпляра нового объекта с последующим вызовом метода. Однако если приложение осуществляет несколько операций над файлом, то более разумным представляется создать экземпляр объекта FileInfo и использовать его методы. Это позволит сэкономить определенное время, поскольку объект будет заранее настроен на нужный файл в файловой системе, в то время как статическому классу придется каждый раз осуществлять его поиск заново.

Аналогичное правило действует и при выборе между классами Directory и DirectoryInfo.

Контрольные вопросы:

1.Какой класс используется для считывания символов из файла?

2.Какой класс применяется для записи символов?

3.Зачем нужны отдельные символьные классы впода/иывола?

4.Для чего используются классы StreamWriter и StreamReader?

5.Для чего используется класс IOException?

6.Для чего используется класс StringBuilder? В чем его отличия от класса String?

Тема 3. Принципы парадигмы объектно-ориентированного программирования








Дата добавления: 2015-10-26; просмотров: 749;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.018 сек.