Смекни!
smekni.com

Основы алгоритмизации и программирования 2 (стр. 28 из 32)

В отличие от класса File, класс FileInfo не обладает статическими методами и может использоваться только посредством создания экземпляров объектов. Объект FileInfo представляет файл, расположенный на диске или по некоторому сетевому адресу. Заметьте, что этот класс не является потоком. Для того чтобы осуществить запись в файл или чтение из файла, необходимо создать объект Stream. Объект FileInfo помогает решить эту задачу, предоставляя несколько методов, которые возвращают созданные экземпляры объектов Stream. Однако, прежде всего, для того чтобы создать объект FileInfo, необходимо указать путь к файлу или директории:

FileInfo aFile = new FileInfo(@"С:\Год.txt");

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

FileInfo aFile = new FileInfo("Data.txt");
if (aFile.Exists)
Console.WriteLine("File Exists"); / Файл существует /
if (File.Exists("Data.txt"))
Console.WriteLine("File Exists"); / Файл существует /

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

Класс FileInfo обладает перечисленными в таблице 9.3 свойствами, относящимися к данному файлу, осуществление манипуляций над которыми позволяет вносить изменения в файл.

8.1.4.Класс DirectoryInfo

Клас

Таблица 9.2 – Основные методы класса Directory

Метод

Описание

CreateDirectory()

Создает директорию в соответствии с заданным путем.

Delete()

Уничтожает указанную директорию вместе со всеми находящимися в ней файлами.

GetDirectories()

Возвращает массив объектов Directory, в котором представлены все директории, находящиеся в данной директории.

GetFiles()

Возвращает массив объектов File для данной директории.

Move()

Переносит указанную директорию на новое место, где этой папке может быть присвоено новое имя.

Таблица 9.3–Свойства класса FileInfo

с класс объекта,

директорий в компьютере класса

Свойство

Описание

Attributes

Позволяет получать или задавать значения атрибутов текущего файла.

CreationTime

Позволяет получать дату и время создания текущего файла.

DirectoryName

Возвращает путь к директории, в которой находится файл.

Exists

Определяет, существует ли данный файл.

FullName

Позволяет получать полный путь к данному файлу.

Length

Позволяет получать размер файла.

Name

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

DirectoryInfo работает в точности так же, как и

FileInfo. Он требует создания экземпляра который представляет собой одну из

, имеющихся

. Как и для

FileInfo, многие методы дублируются в классах Directory и

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

8.1.5.Имена пути и относительные пути

При задании имени пути в программе для .NET имеется возможность использовать либо абсолютное, либо относительное имя пути. Абсолютное имя пути явным образом указывает на расположение файла или директории в каком-либо известном месте, например, на диске С:. Вот пример такого пути: C:\work\LogFile.txt. Обратите внимание на то, что в данном случае местоположение описывается точно, без какой-либо двусмысленности.

Относительные пути указывают на местоположение относительно того места в файловой системе, в котором выполняется приложение. При использовании относительного пути не требуется указывать ни имени диска, ни какого-либо известного места; в качестве отправной точки используется текущая директория.

Например, если приложение выполняется. В директории C:\Development\FileDemo, а в качестве относительного пути используется "LogFile.txt", то это будет файл C:\Development\FileDemo\LogFile.txt. Для перехода. К директории более высокого уровня используется две точки (..). Следовательно, для того же самого приложения путь ". .\Log.txt" будет указывать на файл с именем Log.txt, расположенный в директории C:\Development.

Наиболее коварным при использовании относительных путей в процессе разработки является именно их относительность, зависящая от того, где именно выполняется данное приложение. Если разработка ведется с использованием Visual Studio.NET, то это означает, что приложение находится на несколько уровней ниже создаваемой вами папки проекта. Обычно приложения располагаются в директории ProjectName\bin\Debug.

8.1.6.Объект FileStream

Объект FileStream представляет поток, указывающий на какой-либо файл на диске или на местоположение в сети. Хотя этот класс и обладает методами для чтения из файлов и записи в файлы байтов, чаще для выполнения этих функций вам придется обращаться к классам StreamReader и StreamWriter. Это происходит потому, что класс FileStream оперирует байтами и массивами байтов, в то время как классы stream оперируют символьными данными. Иметь дело с символьными данными оказывается проще, однако нам придется столкнуться с некоторыми операциями, например, с произвольным доступом к файлам, которые могут осуществляться только посредством объекта FileStream, к изучению которого мы приступим несколько позже.

Существует несколько способов создания объекта FileStream. Его конструктор обладает большим количеством перегрузок/версий, однако в самом простом случае он требует передачи двух аргументов – имени файла и значения перечислимого типа FileMode:

FileStream aFile = new FileStream("Log.txt", FileMode.OpenOrCreate);

У перечислимого типа FileMode имеется несколько членов, которые позволяют задавать то, каким образом файл открывается или создается. Допускается их использование в различных сочетаниях.

Элементы перечислимого типа

FileMode

Описание

Append

Открывает файл (если он существует), переводит указатель файла в его конец или создает новый файл. FileMode.Append может использоваться только совместно с членом перечислимого типа FileAccess.Write.

Create

Создает новый файл; если файл с таким именем уже существует, то он уничтожается.

CreateNew

Создает новый файл; если файл с таким именем уже существует, то будет сгенерирована исключительная ситуация.

Open

Открывает существующий файл. Если указанного файла не существует, генерируется исключительная ситуация.

OpenOrCreate

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

Truncate

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

Приведенный выше пример конструктора по умолчанию открывает файл в режиме чтение/запись. Для того чтобы задать другой уровень доступа, следует использовать дополнительный параметр – FileAccess:

FileStream aFile = new FileStream("Log.txt", FileMode.OpenOrCreate, FileAccess.Write) ;

Эта строка кода откроет файл с разрешением доступа на запись. Любая попытка прочитать содержимое этого файла приведет к возникновению исключительной ситуации. Перечислимый тип FileAccess обладает всего тремя Типами; Read, Write и ReadWrite. Следовательно, есть возможность открыть файл только на чтение, только на запись и на чтение и запись одновременно. Это свойство используется в качестве одного из способов варьирования уровня доступа пользователя к файлу в зависимости от уровня его прав.