Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 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; просмотров: 28; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.135.201.209 (0.022 с.) |