private void button2_Click(object sender, System.EventArgs e) {
XmlAttributes attrs=new XmlAttributes();
attrs.XmlElements.Add(new XmlElementAttribute("Book", typeof(BookProduct)));
attrs.XmlElements.Add(new XmlElementAttribute("Product", typeof(Product)));
XmlAttributeOverrides attrOver=new XmlAttributeOverrides();
attrOver.Add(typeof(Inventory), "InventoryItems", attrs);
Inventory newInv;
FileStream f=new FileStream("..\\..\\..\\inventory.xml", FileMode.Open);
XmlSerializer newSr=new XmlSerializer(typeof(Inventory), attrOver);
newInv=(Inventory)newSr.Deserialize(f);
foreach(Product prod, in newInv.InventoryItems) listBox1.items.Add(prod.ProductName);
f.Close();
}
Отметим, что первые несколько строк кода идентичны коду, который использовался для сериализации объекта.
Пространство имен XmlSerialize
предоставляет мощный набор инструментов. Сериализуя объекты в XML, а не в двоичный формат, мы получаем дополнительные возможности, что может действительно увеличить гибкость проектирования.
В этой главе рассматривались широкие возможности пространства имен System.Xml
платформы .NET. Было показано, как прочитать и записать документы XML с помощью классов на основе XMLReader
и XMLWriter
, как в .NET реализована DOM и как использовать возможности DOM. Мы увидели, что XML и ADO.NET действительно очень тесно связаны. DataSet
и документ XML являются двумя различными представлениями одной и той же базовой архитектуры. Мы сериализовали объекты в XML и смогли вернуть их обратно с помощью вызова пары методов. Комбинация Reflection
и XMLSerilization
приводит к некоторым уникальным конструкциям. И, конечно, были рассмотрены XPath
и XslTransform
. В течение ближайших нескольких лет XML станет, если уже не стал, важной частью разработки приложений. Платформа .NET сделала доступным мощный набор инструментов для работы с XML.
Глава 14
Операции с файлами и реестром
В этой главе будет рассмотрено выполнение в C# задач, включающих чтение и запись в файлы и в системный реестр. В частности, будут охвачены следующие вопросы:
□ Исследование структуры каталога, выяснение, какие файлы и папки присутствуют и проверка их свойств
□ Перемещение, копирование и удаление файлов и папок
□ Чтение и запись текста в и из файлов
□ Чтение и запись в реестр
Компания Microsoft предоставила очень интуитивную объектную модель, охватывающую эти области, и в ходе этой главы мы покажем, как использовать классы на основе .NET для выполнения упомянутых выше задач. Для случая операций с файловой системой соответствующие классы почти все находятся в пространстве имен System.IO, в то время как операции с реестром связаны с парой классов в пространстве имен System.Win32.
Классы на основе .NET включают также ряд классов и интерфейсов в пространстве имен System.Runtime.Serilization
, которые связаны с сериализацией, то есть процессом преобразования некоторых данных (например, содержимого документа) в поток байтов для хранения в каком либо месте. Мы не будем рассматривать эти классы в данной главе, так как сосредоточимся на классах, которые предназначены для прямого доступа к файлам.
Отметим, что хотя безопасность влияет на все области, но особенно она важна при модификации файлов или записей реестра. Система безопасности рассматривается отдельно в главе 25. В этой главе мы будем предполагать, что имеются достаточные права доступа для выполнения всех примеров, которые модифицируют файлы или записи реестра, что обеспечивается, например, при использовании учетной записи с полномочиями администратора.
Управление файловой системой
Классы, которые используются для просмотра файловой системы и выполнения таких операций, как перемещение, копирование и удаление файлов, показаны на следующей диаграмме. Пространство имен каждого класса показано в скобках под именем каждого класса на диаграмме:
Назначение этих классов следующее:
□ System.MarshalByRefObject
— класс базового объекта для классов .NET, которые являются удаленными. Допускает маршализацию данных между прикладными доменами.
□ FileSystemInfo
— базовый класс, который представляет любой объект файловой системы.
□ FileInfo
и File
— представляют файл в файловой системе.
□ DirectoryInfo
и Directory
— представляют папку в файловой системе.
□ Path
— содержит статические члены, которые можно использовать для манипуляций именами путей доступа.
Отметим, что в Windows объекты, которые содержат файлы и используются для организации файловой системы, называются папками. Например, в пути доступа C:\My Documents\ReadMe.txt
файлом является ReadMe.txt
, а My Documents
— папкой. Папка (folder) является специфическим для Windows терминам: практически во всех других операционных системах вместо папки используется термин каталог (directory). В соответствии с желанием Microsoft, чтобы .NET была максимально независимой от операционной системы, соответствующие базовые классы .NET называются Directory
и DirectoryInfo
. Однако в связи с возможной путаницей с каталогами LDAP (обсуждаемыми в главе 15), и в связи с тем, что эта книга посвящена Windows, здесь используется термин папка.
Читать дальше