Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 11 лет назад пользователемГлеб Муратов
1 Атрибуты Работа с файлами Сериализация Лекция 9
2 Атрибуты Работа с файлами Сериализация
3 Атрибуты Работа с файлами Сериализация
4 Метаданные : Стандартные Расширенные ( атрибуты ) Атрибуты : Дополнительная информация о классе, методе и т. д. Использование Может учитываться во время компиляции Может учитываться во время исполнения
5 В квадратных скобках перед целевым объектом : [Serializable] [Obsolete] [DefaultMember(rre)] [MyAttrib(im, myval = 12345)] public struct Complex { double re, im; } [XmlIgnore] public double Re { get; set; }
6 Через информацию о члене : bool MemberInfo.IsDefined(Type attrType, bool inherit) – нет доступа к атрибутному объекту Только проверка о существовании атрибута Через атрибут : Attribute Attribute.GetCustomAttribute(MemberInfo mi, Type attrType) Attribute[] GetCustomAttributes(MemberInfo mi)
7 Сериализация – что и как сериализовать Работа с БД Автоматическое чтение / запись объектов в БД Автогенерация таблиц по атрибутам WCF, веб - сервисы Пометить метод как доступный удаленно Аспектно - ориентированное программирование
8 Attribute Класс, должен быть унаследован от класса Attribute public class ColumnAttribute : Attribute {…} AttributeUsage Можно задавать область применимости атрибута с помощью атрибута AttributeUsage [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field)] public class ColumnAttribute : Attribute {…}
9 Работа с атрибутами
10 Атрибуты Работа с файлами Работа с файловой системой Операции с потоками Сериализация
11 Пространство имен System.IO Работа с файловой системой DriveInfo Диски : DriveInfo DirectoryInfoDirectoryFileSystemInfo Папки : DirectoryInfo, Directory, FileSystemInfo FileFileInfoFileSystemInfo Файлы : File, FileInfo, FileSystemInfo Работа с путями Path Path Наблюдение за изменениями в файловой системе FileSystemWatcher FileSystemWatcher Работа с потоками ( чтение / запись файла ) Stream Stream, производные от него и классы обертки
12 Два способа работы : File, Directory – статические классы FileInfo, DirectoryInfo Многие методы похожие FileSystemInfo Базовый для FileInfo и DirectoryInfo DriveInfo Информация о диске Не связан с FileSystemInfo
13 Экземпляр представляет один диск DriveInfo drive = new DriveInfo("c"); DriveInfo drive = new Информация о диске системы Name Name – имя диска DriveType DriveType – тип диска. Например : Fixed, CDRom IsReady IsReady – готов ли к использованию ( например для CD Rom) VolumeLabel VolumeLabel – метка тома DriveFormat DriveFormat – тип файловой системы TotalSize TotalSize – размер диска AvailableFreeSpace AvailableFreeSpace – размер свободного места … Получение всех дисков GetDrives() Статически метод GetDrives() DriveInfo[] drives = DriveInfo.GetDrives();
14 Абстрактный класс Базовый класс для DirectoryInfo и FileInfo Свойства файла / папки Name Name – название файла, папки FullName FullName – полное имя, т. е. с полным путем Extension Extension - расширение Exists Exists – существует ли такой файл / папка CreationTimeLastAccessTime CreationTime, LastAccessTime – время создания / последнего доступа ( изменения ) Attributes Attributes - атрибуты ( только на чтение ) …
15 DirectoryInfo Экземпляр DirectoryInfo представляет одну папку файловой системы Наследник от FileSystemInfo Создание объекта ( но не физической папки на диске ) DirectoryInfo windowsFolder = new Получение информации о файлах и папках GetDirectories() GetDirectories() – получение подпапок. Возможен поиск по шаблону и поиск во всех дочерних папках DirectoryInfo[] folders = GetDirectories(); DirectoryInfo[] folders = di.GetDirectories(my*); DirectoryInfo[] folders = di.GetDirectories(my*, SearchOption.AllDirectories); GetFiles() GetFiles() – получение файлов FileInfo[] files = folder.GetFiles(); FileInfo[] files = folder.GetFiles("*.txt, SearchOption.TopDirectoryOnly); GetFileSystemInfos() GetFileSystemInfos() – получение всех файлов / папок FileSystemInfo[] fsi = folder.GetFileSystemInfos(); Операции с папками Create() Create() – создание папки по текущему объекту DirectoryInfo new CreateSubdirectory() CreateSubdirectory() - создание подпапки текущего каталога Delete() Delete() – удаление текущей папки MoveTo () MoveTo () – перемещение текущей папки Directory Класс Directory имеет практически такие же методы, но в статическом исполнении Directory.CreateDirectory(path);
16 FileInfo Экземпляр FileInfo представляет один файл файловой системы Наследник от FileSystemInfo Создание объекта ( но не физического файла на диске ) FileInfo file = new FileInfo(c:\\test.txt); Свойства ( в добавление к свойствам FileSystemInfo) DirectoryDirectoryName Directory, DirectoryName – папка DirectoryInfo или полное имя папки ( с полным путем ) IsReadOnly IsReadOnly – файл только для чтения Length Length – размер файла в байтах Операции с файлами целиком Create()CreateText() Create(), CreateText() – создание файла CopyTo() CopyTo() – копирование файла Delete() Delete() – удаление текущего файла MoveTo () MoveTo () – перемещение текущего файла Операции с содержимым файла Create()CreateText()OpenRead()OpenText()OpenWrite()AppendText() Create(), CreateText(), OpenRead(), OpenText(), OpenWrite(), AppendText() File Класс File имеет практически такие же методы, но в статическом исполнении File.Delete(c:\\myText.txt);
17 Работа с файлами каталогами
18 Stream Представляет файл, порт и т. д. как поток байт Абстрактный класс Запись, чтение, перемещение указателя Реализация конкретных потоков в наследниках Классы обертки. Reader / Writer Чтение из / запись в поток BinaryReader/BinaryWriter – бинарные чтение / запись StreamReader/StreamWriter – текстовые чтение / запись Понятие кодировки (Encoding)
19 Возможности CanRead – можно ли читать CanWrite – можно ли писать CanSeek – можно ли двигать курсор Чтение int Read(byte[] buffer, int offset, int count) Запись void Write(byte[] buffer, int offset, int count) Текущая позиция long Position {get; set; } Перемещение long Seek(long offset, SeekOrigin origin); Закрытие потока void Close() void Dispose()
20 Stream PipeStream Поток данных из именованных каналов FileStream поток из файла MemoryStream поток из памяти SqlFileStream NetworkStream поток из сети UnmanagedMemoryStream поток неуправляемых данных …
21 CryptoStream CryptoStream – предоставляет шифрование потока BufferedStream BufferedStream – добавляет буферизацию GZipStreamDeflateStream GZipStream, DeflateStream – предоставляют возможность сжатия потока BinaryReader/BinaryWriter StreamReader/StreamWriter BinaryReader/BinaryWriter, StreamReader/StreamWriter – предоставляют удобные способы чтения / записи в поток
22 Классы обертки. Оборачивают конкретный поток Бинарный доступ к потоку Чтение / запись встроенных типов ReadXXX() / WriteXXX() XXX = Int32, Single, Double, … « Подсмотреть » следующий символ PeekChar() Кодировка по умолчанию UTF8
23 Классы обертки. Оборачивают конкретный поток Текстовый доступ к потоку Чтение / запись строк ReadLine() – чтение строки ReadToEnd() – сразу весь файл Write() – запись строки WriteLine() – запись строки + символ новой строки Параметры аналогичны функциям консоли
24 System.Text.Encoding Определяет преобразование char (Unicode) byte [] Encoding GetEncoding() получает кодировку по Имени : GetEncoding(windows-1251) Номеру : GetEncoding(1251) Использование : StreamReader sr = new StreamReader(stream, Encoding.Unicode);
25 TextReader/TextWriter – базовые классы StreamReader/StreamWriter – из потока StringReader/StringWriter – из строки Стандартные потоки Console.In – поток ввода Console.Out – поток вывода Console.Error – поток ошибок
26 Текстовый ввод - вывод
27 Атрибуты Работа с файлами Сериализация
28 Сериализация – процесс сохранения состояния объекта в потоке Сохраняются данные и необходимая информация для реконструкции объекта – десериализации При сериализации Сохраняется граф объектов Сохраняются данные и всех базовых классов Использование Сохранение данных программы ( например, настройки ) Передача объектов по сети Персистентные объекты ( время жизни объекта больше времени работы программы )
29 Двоичный Компактный Для десериализации нужен.NET SOAP Стандарт W3C.org Не зависит от платформы Многословен XML Произвольный XML формат Не зависит от платформы Многословен. Полностью настраиваемый
30 Только для двоичного и SOAP форматов С помощью атрибутов [Serializable] [Serializable] – указывает на то, что тип можно сериализовать [Serializable] class Complex {….} Что сериализуется Все публичные и приватные поля ( и автоматические свойства ) Базовые и используемые типы тоже должны быть сериализуемыми, т. е. иметь атрибут [Serializable] [NonSerialized] [NonSerialized] – помечается поле или автоматическое свойство, если что - то сериализовать не нужно [Serializable] struct Complex { double im, re; [NonSerialized] double mod, arg;}
31 Форматеры BinaryFormatter BinaryFormatter – для бинарной сериализации (System.Runtime.Serialization.Formatters.Binary.Bina ryFormatter) SoapFormatter SoapFormatter – для сериализации в SOAP фомате (System.Runtime.Serialization.Formatters.Soap.SoapF ormatter) XmlSerializer XmlSerializer – для сериализации в произвольный формат (System.Xml.Serialization.XmlSerializer)
32 Для BinaryFormatter и SoapFormatter Serialize Serialize(stream, obj) – сериализация объекта в поток Complex complex = new Complex(10, 20); using (FileStream stream = new FileStream("store.bin", FileMode.Create)) { BinaryFormatter binaryFormatter = new BinaryFormatter(); binaryFormatter.Serialize(stream, complex); } Deserialize object Deserialize(stream) – для десериализации объекта Complex complex; using (FileStream stream = new FileStream("store.bin", FileMode.Open)) { BinaryFormatter binaryFormatter = new BinaryFormatter(); complex = (Complex)binaryFormatter.Deserialize(stream); } Для XmlSerializer необходимо указать сериализуемый тип (- ы ) XmlSerializer serializer = new XmlSerializer(typeof(Complex)); XmlSerializer serializer = new XmlSerializer(typeof(Car), new Type[] { typeof(Radio) });
33 Сериализация только публичных полей и свойств ( приватных полей, стоящих за ними ) Должен быть конструктор без параметров Атрибуты настройки вида XML [XmlIgnore] [XmlAttribute] [XmlElement] [XmlText] И др.
34 Сериализация
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.