Вход/Регистрация
C# для профессионалов. Том II
вернуться

Ватсон Карли

Шрифт:

В этом разделе мы будем в основном использовать классы

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

FileInfo MyFile = new FileInfo(@"C:\Program Files\My Program\ReadMe.txt");

MyFile.CopyTo(@"D:\Copies\ReadMe.txt");

Имеет тот же результат, что и:

File.Copy(@"C:\Program Files\My Program\ReadMe.txt", @"D:\Copies\ReadMe.txt");

Первый фрагмент кода будет выполняться немного дольше, так как он требует создания экземпляра объекта

FileInfo
—
MyFile
, но он оставляет
MyFile
готовым для выполнения дальнейших действий на том же файле.

Для создания экземпляра класса

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

DirectoryInfo MyFolder = new DirectoryInfo(@"C:\Program Files");

Если путь доступа представляет объект, который не существует, то исключение будет порождено не во время создания, а в тот момент, когда будет вызван метод, которому потребовался объект соответствующей файловой системы. Можно определить существует ли объект и имеет ли соответствующий тип, проверяя свойство Exists, которое реализовано для обоих этих классов:

FileInfo Test = new FileInfo(@"C:\Windows");

Console.WriteLine(Test.Exists.ToString);

Console.WriteLine(Test.CreationTime.ToString);

Отметим, что для того, чтобы это свойство возвращало

true
, соответствующий объект файловой системы должен быть соответствующего типа. Другими словами, если создается экземпляр объекта
FileInfo
, содержащий путь доступа папки или, если создается объект
DirectoryInfo
, задающий путь доступа файла,
Exists
будет иметь значение
false
. С другой стороны, большинство свойств и методов этих объектов будут возвращать значение, если вообще это возможно. Но они не обязательно порождают исключение из-за того, что был вызван неправильный тип объекта, а только в том случае, если требовалось выполнить что-то реально невозможное. Например, приведенный выше фрагмент кода сначала выведет
false
(так как
C:\Windows
является папкой), но затем все равно правильно покажет время создания папки, так как в папке имеется эта информация. С другой стороны, если затем попробовать открыть папку, как если бы это был файл, с помощью метода
FileInfo.Open
, то будет порождено исключение.

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

FileInfo
или
DirectoryInfo
) найти о нем информацию, используя ряд свойств, включающих:

Имя Назначение
CreationTime
Время создания файла или папки.
DirectoryName(FileInfo)
,
Parent(DirectoryInfo)
Полный путь доступа содержащей папки.
Exists
Существует ли файл или папка.
Extension
Расширение файла. Возвращается пустым для папок.
FullName
Полное имя пути доступа файла или папки.
LastAccessTime
Время последнего доступа к файлу или папке.
LastWriteTime
Время последней модификации файла или папки.
Name
Имя файла или папки.
Root
(Только
DirectoryInfo
.) Корневая часть пути доступа.
Length
(Только
FileInfo
.) Возвращает размер файла в байтах.

Можно также выполнить действия на объекте файловой системы с помощью следующих методов:

Имя Назначение
Create
Создает папку или пустой файл с заданным именем. Для
FileInfo
он возвращает также объект потока, чтобы позволить записать в файл. Потоки будут рассмотрены позже.
Delete
Удаляет файл или папку. Для папок существует вариант рекурсивного метода
Delete
.
MoveTo
Перемещает и/или переименовывает файл или папку.
CopyTo
(Только
FileInfo
.) Копирует файл. Отметим, что не существует метода копирования для папок. Если копируются все деревья каталогов, то необходимо индивидуально скопировать каждый файл и создать новые папки, соответствующие старым папкам.
GetDirectories
(Только
DirectoryInfo
.) Возвращает массив объектов
DirectoryInfo
, представляющих все папки, содержащиеся в этой папке.
GetFiles
(Только
DirectoryInfo
.) Возвращает массив объектов
FileInfo
, представляющих все папки, содержащиеся в этой папке.
GetFileSystemObjects
(Только
DirectoryInfo
.) Возвращает объекты
FileInfo
и
DirectoryInfo
, представляющие все объекты, содержащиеся в этой папке, как массив ссылок
FileSystemInfo
.

Отметим, что приведенные выше таблицы показывают основные свойства и методы, и не являются исчерпывающими.

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

FileInfo
реализует также ряд методов (
Open
,
OpenRead
,
OpenText
,
OpenWrite
,
Create
,
CreateText
, которые возвращают объекты потоков для этой цели).

Интересно то, что время создания, время последнего доступа, и время последней записи являются изменяемыми:

// Test является FileInfo или DirectoryInfo. Задать время создания

// как 1 Jan 2001, 7.30 am

Test.CreationTime = new DateTime(2001, 1, 1, 7, 30, 0);

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

  • Читать дальше
  • 1
  • ...
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: