![]() Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву ![]() Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Создание подкаталога в заданном каталоге
DirectoryInfo di2 = di.CreateSubdirectory("SubDir"); Удаление каталога di1.Delete(); Если удаляемый каталог не пуст, возникает исключение. Перемещение (переименование) каталога di.MoveTo(@"c:\NewTempDir"); Этот метод не позволяет перемещать каталог на другой диск (для этого придется «вручную» заняться всем содержимым каталога). Работа с файлами Для выполнения задач, связанных с файлами, можно использовать класс FileInfo. Для получения списка файлов в папке используется статический метод GetFiles класса DirectoryInfo. У методов GetDirectories и GetFiles имеется перегруженный вариант со вторым параметром, в котором можно задать шаблон (маску) интересующих папок или файлов. Например, Directory.GetFiles(@"d:\MyWork", "*.doc") вернет массив с именами Word-файлов в папке d:\MyWork.
Стандартные диалоговые окна
Создадим оконное приложение, позволяющее объединять содержимое двух выбранных пользователем файлов и сохранять их в третьем. Интерфейс программы очень прост: всего три кнопки в окне. Чтобы обеспечить правильную последовательность действий пользователя, будем управлять доступностью кнопок. public partial class Form1: Form { public Form1() { InitializeComponent(); ofdSourceFile.InitialDirectory = "c:\\"; ofdSourceFile.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*"; } private void Form1_Load(object sender, EventArgs e) { btnSrcFile1.Enabled = true; btnSrcFile2.Enabled = false; btnSaveFile.Enabled = false; } private void btnSrcFile1_Click(object sender, EventArgs e) { btnSrcFile1.Enabled = false; OpenAndReadFile(); btnSrcFile2.Enabled = true; } private void btnSrcFile2_Click(object sender, EventArgs e) { btnSrcFile2.Enabled = false; OpenAndReadFile(); btnSaveFile.Enabled = true; } private void OpenAndReadFile() { StreamReader sr; if (ofdSourceFile.ShowDialog() == DialogResult.OK) { if (ofdSourceFile.ShowDialog() == DialogResult.OK) { sr = new StreamReader(ofdSourceFile.FileName); // сюда можно вставить код для чтения из файла sr.Close(); } } } private void btnSaveFile_Click(object sender, EventArgs e) { btnSaveFile.Enabled = false; StreamWriter sw; if (sfdSaveFile.ShowDialog() == DialogResult.OK) { sw = new StreamWriter(sfdSaveFile.FileName); // сюда можно вставить код для записи в файл sw.Close(); } } } Здесь используется переменная ofdSourceFile, которая описана как OpenFileDialog. Это описание генерируется дизайнером в ответ на перетаскивание на форму соответствующего элемента управления. Часто целесообразнее описать такую переменную как локальную в рамках метода-обработчика. Обратите внимание на то, что текст приложения еще не завершен – необходимо реализовать чтение из двух файлов и запись их содержимого в третий файл. Сериализация Использование ранее рассмотренных простых средств файлового ввода-вывода оказывается совершенно неудобным для постоянного хранения сложных объектов с разнообразной и даже динамически меняющейся структурой. Для подобных случаев предлагается использовать поддерживаемый в.NET механизм сериализации. Буквальный перевод этого термина означает преобразование информационных объектов в линейную хранимую форму и обратную реконструкцию линейного представления в объектную структуру.
Пространства имен System.Runtime.Serialization.Formatters.Binary; Синтаксическая форма сериализации выглядит довольно просто: [Serializable] public class Radio { public bool Autosearch; public double[] stations; [NonSerialized] public string radioed = “XF-552RR6”; } Остальные классы нашего примера: [Serializable] public class Car { public Radio theRadio=new Radio(); public bool Is4Wheel; } [Serializable] public class JamesBondCar: Car { public bool canFly; public bool canShoot; } public class Program { static void Main() { JamesBondCar jbc = new JamesBondCar(); jbc.canFly = false; jbc.canShoot = true; jbc.theRadio.stations = new double[]{88.8, 99.9, 103.7}; jbc.Is4Wheel=true; // Теперь сохраним объект в файле user. dat. BinaryFormatter binFormat = new BinaryFormatter(); Stream fStream = new FileStream(“user.dat", FileMode.Create, FileAccess.Write, FileShare.None); binFormat. Serialize (fStream, jbc); fStream.Close(); } } В приведенном примере сериализация осуществлялась в компактном бинарном формате с помощью класса BinaryFormatter. Часто практичнее сохранят в формате XML с помощью другого класса-«форматизатора» SoapFormatter. Такая простота использования сериализации может вызвать недооценку сложности того, что происходит за кулисами. Ведь сериализуемый объект может быть производным классом и содержать внутренние достаточно сложные переменные-объекты и, даже, коллекции объектов. В этом случае процесс сериализации должен быть выполнен на всех уровнях, либо, если этого не требуется, быть настолько управляемым, чтобы регулировать глубину сериализации. Объектные графы Для лучшего представления о том, как выполняется процесс сериализации, удобно использовать так называемые объектные графы. Представим, что имеются следующие классы. «Автомобиль», «Радио» (класс «Автомобиль» содержит переменную этого типа) и «Автомобиль Джеймса Бонда» (производный от «Автомобиль»). Текстовое представление этого графа (которое строит CLR) выглядит так: [Computer 3, ref 2], [CPU 2], [Notebook 1, ref 3, ref 2] Таким образом, на графе присутствуют отношения двух типов – наследование и композиция. При сериализации объекта класса Notebook объектный граф поможет учесть все его связи, в том числе завуалированную связь с объектом CPU. Если Вам не нужно осуществлять сериализацию всех переменных объекта (выборочная сериализация), пометьте несериализуемые переменные атрибутом [NonSerialized]. Замечания. 1. Атрибут [Serializable] не наследуется. (в Справке сказано, что класс с этим атрибутом cannot be inherited!) 2. Сериализация с помощью BinaryFormatter сохраняет все переменные объекта. Сериализация с помощью SoapFormatter или XmlSerializer сохраняет только открытые переменные и закрытые переменные, доступные через открытые свойства (а как это?). Десериализация vs Singleton Формат сериализации - BinaryFormatter – компактный двоичный формат. Требует подключения System.Runtime.Serialization.Formatters.Binary. - SoapFormatter – в виде сообщения SOAP. Требует подключения System.Runtime.Serialization.Formatters.Soap. В проект нужно добавить ссылку на System.Runtime.Serialization.Formatters.Soap.dll. Этот вариант удобен при передаче данных по протоколу HTTP. - XmlSerializer – в виде «чистого» XML. Требует подключения System.Xml.Serialization. Объекты всех этих типов для осуществления сериализации реализуют методы Serialize и Deserialize. Реконструкция объектов // Чтение JamesBondCar из двоичного файла. fStream = File.OpenRead("CarData"); JamesBondCar carFromDisk = (JamesBondCar)binFormat. Deserialize (fStream); Console.WriteLine("Может ли машина летать? {0}", carFromDisk.canFly); fStream.Close();
|
||||||||||||||||||
Последнее изменение этой страницы: 2021-12-15; просмотров: 30; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.138.114.154 (0.015 с.) |