Значение Описание

Archive Используется приложениями при выполнении резервного копирования, а в

некоторых случаях при удалении старых файлов

Compressed Файл является сжатым

Directory Объект файловой системы является каталогом

Encrypted Файл является зашифрованным

Hidden Файл является скрытым

Normal Файл находится в обычном состоянии, и для него установлены любые другие

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

Offline Файл, расположенный на сервере, кэширован в хранилище на клиентском

компьютере. Возможно, что данные этого файла уже устарели

ReadOnly Файл доступен только для чтения

System Файл является системным

Листинг 11.10 демонстрирует использование класса FileInfo для копирования всех файлов с расширением jpg из каталога d:\foto в каталог d:\temp. Метод Exists позволяет проверить, существует ли исходный каталог.

Листинг 11.10. Копирование файлов

using System;

using System.IO;

namespace ConsoleApplication1

{

class Class1

{

static void Main()

{

try

{

string DestName = @"d:\temp\";

DirectoryInfo dest = new DirectoryInfo(DestName);

dest.Create(); // создание целевого каталога

DirectoryInfo dir = new DirectoryInfo(@"d:\foto");

if (!dir.Exists) // проверка существования каталога

{

Console.WriteLine("Каталог " +

dir.Name + " не существует"); return;

}

FileInfo[] files = dir.GetFiles("*.jpg"); //список файлов

foreach (FileInfo f in files)

f.CopyTo(dest + f.Name); // копирование файлов

Console.WriteLine("Скопировано " +

files.Length + " jpg-файлов");

}

catch (Exception e)

{

Console.WriteLine("Error: " + e.Message);

}

}

}

}

Использование классов File и Directory аналогично, за исключением того, что их методы являются статическими и, следовательно, не требуют создания объектов.

Сохранение объектов (сериализация)

В С# есть возможность сохранять на внешних носителях не только данные при­митивных типов: но и объекты. Сохранение объектов называется сериализацией, а восстановление сохраненных объектов — десериализацией. При сериализации объект преобразуется в линейную последовательность байтов. Это сложный процесс, поскольку объект может включать множество унаследованных полей и ссылки на вложенные объекты, которые, в свою очередь, тоже могут состоять из объектов сложной структуры.

К счастью, сериализация выполняется автоматически, достаточно просто пометить класс как сериализуемый с помощью атрибута [Serializable]. Атрибуты рассмат­риваются в главе 12, пока же достаточно знать, что атрибуты — это дополнитель­ные сведения о классе, которые сохраняются в его метаданных. Те поля, которые сохранять не требуется, помечаются атрибутом [NonSerialized], например:

[Serializable]

class Demo

{

public int a = 1;

[NonSerialized]

public double y;

public Monster X, Y;

}

Объекты можно сохранять в одном из двух форматов: двоичном или SOAP (в виде XML-файла). В первом случае следует подключить к программе пространство имен System.Runtime.Serialization.Formatters.Binary, во втором — пространство System.Runtime.Seria1ization.Formatters.Soap.

Рассмотрим сохранение объектов в двоичном формате. Для этого используется класс BinaryFormatter, в котором определены два метода:

Serialize(поток, объект):

Deserialize(поток);

Метод Serialize сохраняет заданный объект в заданном потоке, метод Deserialize

восстанавливает объект из заданного потока.

В листинге 11.11 объект приведенного ранее класса Demo сохраняется в файле на

диске с именем Demo.bin. Этот файл можно просмотреть, открыв его, к примеру,

в Visual Studio.NET.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: