Рейтинговые книги
Читем онлайн ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание - Эндрю Троелсен

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 138 139 140 141 142 143 144 145 146 ... 259

public enum FileAttributes {

 ReadOnly,

 Hidden,

 // Файл, являющийся частью операционной системы или используемый

 // исключительно операционной системой.

 System,

 Directory,

 Archive,

 // Это имя зарезервировано для использования в будущем.

 Device,

 // Файл является 'нормальным' (если не имеет других

 // установленных атрибутов),

 Normal,

 Temporary,

 // Разреженные файлы обычно являются большими файлами,

 // данные которых по большей части – нули.

 SparseFile,

 // Блок пользовательских данных, связанных с файлом или каталогом.

 ReparsePoint,

 Compressed,

 Offline,

 // Файл, который не будет индексирован службой индексации

 // содержимого операционной системы.

 NotContentIndexed,

 Encrypted

}

Перечисление файлов с помощью DirectoryInfo

Вдобавок к получению базовой информации о существующем каталоге, вы можете добавить в пример несколько вызовов методов типа DirectoryInfo. Сначала используем метод GetFiles(), чтобы получить информацию обо всех файлах *.bmp, размещенных каталоге C:Windows. Этот метод возвращает массив типов FileInfo, каждый из которых сообщает подробности о конкретном файле (подробности о самом типе FileInfo будут представлены в этой главе немного позже).

class Program {

 static void Main(string[] args) {

  Console.WriteLine("***** Забавы с Directory(Info) *****n");

  DirectoryInfo dir = new DireetoryInfо(@"C:Windows");

  // Получение всех файлов с расширением bmp.

  FileInfo[] bitmapFiles = dir.GetFiles("*.bmp");

  // Сколько их всего?

  Console.WriteLine("Найдено {0} файлов *.bmpn", bitmapFiles.Length);

  // Вывод информации о файлах.

  foreach (FileInfo f in bitmapFiles) {

   Console.WriteLine("***************************n");

   Console.WriteLine("Имя: {0} ", f.Name);

   Console.WriteLine("Размер: {0} ", f.Length);

   Console.WriteLine("Создан: {0} ", f.CreationTime);

   Console.WriteLine("Атрибуты: {0} ", f.Attributes);

   Console.WriteLine("***************************n");

  }

 }

}

Запустив это приложение, вы увидите список, подобный показанному на рис. 16.3 (ваши результаты могут быть другими!).

Рис. 16.3. Информация о файлах с точечными изображениями

Создание подкаталогов с помощью DirectoryInfo

Вы можете программно расширить структуру каталога, используя метод DirectoryInfo.CreateSubdirectory(). Этот метод с помощью одного обращения к функции позволяет создать как один подкаталог, так и множество вложенных подкаталогов. Для примера рассмотрите следующий блок программного кода, расширяющий структуру каталога C:Windows путем создания нескольких пользовательских подкаталогов.

class Program {

 static void Main(string[] args) {

  Console.WriteLine("***** Забавы с Directory(Info) *****n");

  DirectoryInfo dir = new DirectoryInfo(@"C:Windows");

  …

  // Создание MyFoo в исходном каталоге.

  dir.CreateSubdirectory("MyFoo");

  // Создание MyBarMyQaaz в исходном каталоге

  dir.CreateSubdirectory(@"MyBarMyQaaz");

 }

}

Если теперь проверить каталог Windows в окне программы Проводник, вы увидите там новые подкаталоги (рис. 16.4).

Рис. 16.4. Создание подкаталогов

Хотя вы и не обязаны использовать возвращаемое значение метода CreateSubdirectory(), полезно знать, что в случае успешного выполнения тип DirectoryInfo возвращает созданный элемент.

// CreateSubdirectory() возвращает объект DirectoryInfo,

// представляющий новый элемент.

DirectoryInfo d = dir.CreateSubdirectory("MyFoo");

Console.WriteLine("Создан: {0} ", d.FullName);

d = dir.CreateSubdirectory(@"MyBarMyQaaz");

Console.WriteLine("Создан: {0} ", d.FullName);

Работа с типом Directory

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

Чтобы проиллюстрировать некоторые функциональные возможности типа Directory, заключительная модификация этого примера отображает имена всех дисков, отображаемых на данном компьютере (для этого применяется метод Directorу.GetLogicalDrives()) и используется статический метод Directory. Delete() для удаления ранее созданных подкаталогов MyFoo и MyBarMyQaaz.

class Program {

 static void Main(string[] args) {

  …

  // Список дисков данного компьютера.

  string[] drives = Directory.GetLogicalDrives();

  Console.WriteLine("Вот ваши диски:");

  foreach (string s in drives) Console.WriteLine(" -› {0}", s);

  // Удаление созданного.

  Console.WriteLine("Нажмите ‹Enter› для удаления каталогов");

  try {

   // Второй параметр сообщает, хотите ли вы

   // уничтожить подкаталоги

   Directory.Delete(@"C:WindowsMyBar", true);

  } catch (IOException e) {

   Console.WriteLine(e.Message);

  }

 }

}

Исходный код. Проект MyDirectoryApp размещен в подкаталоге, соответствующем главе 16.

Работа с типом класса DriveInfo

В .NET 2.0 пространство имен System.IO предлагает класс с именем DriveInfo. Подобно Directory.GetLogicalDrives(), статический метод DriveInfo.GetDrives() позволяет выяснить имена дисков машины. Однако, в отличие от Directory.GetLogicalDrives(), класс DriveInfo обеспечивает множество дополнительной информации (например, информацию о типе диска, свободном пространстве, метке тома и т.д.). Рассмотрите следующий пример программного кода.

class Program {

 static void Main(string[] args) {

  Console.WriteLine("***** Забавы с DriveInfo *****n'');

  // Получение информации о дисках.

  // Вывод информации о состоянии.

  foreach(DriveInfo d in myDrives) {

   Console.WriteLine("Имя: {0}", d.Name);

   Console.WriteLine("Тип: {0}", d.DriveType);

   // Проверка диска.

   if (d.IsReady) {

    Console.WriteLine("Свободно: {0}", d.TotalFreeSpace);

    Console.WriteLine("Формат: {0}", d.DriveFormat);

    Console.WriteLine("Метка тома: {0}n", d.VolumeLabel);

   }

  }

  Console.ReadLine();

 }

}

На рис. 16.5 показан вывод, соответствующий состоянию моей машины.

Рис. 16.5. Сбор информации о дисках с помощью DriveInfo

Итак, мы рассмотрели некоторые возможности классов Directory.DirectoryInfo и DriveInfo. Далее вы узнаете, как создавать, открывать, закрывать и уничтожать файлы, присутствующие в каталоге.

Исходный код. Проект DriveTypeApp размещен в подкаталоге, соответствующем главе 16.

Работа с классом FileInfo

Как показывает пример MyDirectoryApp, класс FileInfo позволяет получить подробные сведения о файлах, имеющихся на вашем жестком диске (время создания, размер, атрибуты и т.д.), а также помогает создавать, копировать, перемещать и уничтожать файлы. Вдобавок к набору функциональных возможностей, унаследованных от FileSystemInfо, класс FileInfo имеет свои уникальные члены, и некоторые из них описаны в табл. 16.4.

Таблица 16.4. Наиболее важные элементы FileInfo

Член Описание AppendText() Создает тип StreamWriter (будет описан позже) для добавления текста в файл CopyTo() Копирует существующий файл в новый файл Create() Создает новый файл и возвращает тип FileStream (будет описан позже) для взаимодействия с созданным файлом CreateText() Создает тип StreamWriter, который записывает новый текстовый файл Delete() Удаляет файл, к которому привязан экземпляр FileInfo Directory Получает экземпляр каталога родителя DirectoryName Получает полный путь к каталогу родителя Length Получает размер текущего файла или каталога MoveTo() Перемещает указанный файл в новое место, имеет опцию для указания нового имени файла Name Получает имя файла Open() Открывает файл с заданными возможностями чтения/записи и совместного доступа OpenRead() Создает FileStream с доступом только для чтения OpenText() Создает тип StreamReader (будет описан позже) для чтения из существующего текстового файла OpenWrite() Создает FileStream с доступом только для записи

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

1 ... 138 139 140 141 142 143 144 145 146 ... 259
На этой странице вы можете бесплатно читать книгу ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание - Эндрю Троелсен бесплатно.
Похожие на ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание - Эндрю Троелсен книги

Оставить комментарий