V.Yakimova 8 сар өмнө
parent
commit
66271c388b
1 өөрчлөгдсөн 96 нэмэгдсэн , 681 устгасан
  1. 96 681
      readme.md

+ 96 - 681
readme.md

@@ -1,729 +1,144 @@
-# Конспект лекции "Работа с каталогами и файлами"
-## Работа с дисками
+# Конспект лекции "Форматы файлов"
+## CSV
 ```
-using System;
-using System.IO;
- 
-DriveInfo[] drives = DriveInfo.GetDrives();
+using System.Globalization;
+using CsvHelper;
+using CsvHelper.Configuration;
 
-foreach (DriveInfo drive in drives)
-{
-    Console.WriteLine($"Название: {drive.Name}");
-    Console.WriteLine($"Тип: {drive.DriveType}");
-    if (drive.IsReady)
+using (var reader = new StreamReader("./people.dat")) {
+    using (var csv = new CsvReader(
+        reader, CultureInfo.InvariantCulture))
     {
-        Console.WriteLine($"Объем диска: {drive.TotalSize}");
-        Console.WriteLine($"Свободное пространство: {drive.TotalFreeSpace}");
-        Console.WriteLine($"Метка: {drive.VolumeLabel}");
-    }
-    Console.WriteLine();
-}
-```
-Результат работы:
-```
-Название: C:\
-Тип: Fixed                         
-Объем диска: 127326396416          
-Свободное пространство: 81790328832
-Метка:                             
-
-Название: D:\
-Тип: Fixed
-Объем диска: 249375666176
-Свободное пространство: 84100747264
-Метка:
-
-Process finished with exit code 0.
-```
-## Работа с каталогами
-### Получение списка файлов и подкаталогов
-```
-string dirName = "C:\\";
- 
-if (Directory.Exists(dirName))
-{
-    Console.WriteLine("Подкаталоги:");
-    string[] dirs = Directory.GetDirectories(dirName);
-    foreach (string s in dirs)
-    {
-        Console.WriteLine(s);
-    }
-    Console.WriteLine();
-    Console.WriteLine("Файлы:");
-    string[] files = Directory.GetFiles(dirName);
-    foreach (string s in files)
-    {
-        Console.WriteLine(s);
+        var records = csv.GetRecords<Foo>();
+        foreach (var record in records) {
+            Console.WriteLine("{0}, {1}", record.description, record.value);
+        }
     }
 }
-```
-Результат работы:
-```
-Подкаталоги:
-C:\$Recycle.Bin          
-C:\$WinREAgent           
-C:\Config.Msi            
-C:\Documents and Settings
-C:\Intel                 
-C:\PerfLogs
-C:\Program Files
-C:\Program Files (x86)
-C:\ProgramData
-C:\Recovery
-C:\System Volume Information
-C:\Users
-C:\Windows
-
-Файлы:
-C:\DumpStack.log.tmp
-C:\hiberfil.sys
-C:\pagefile.sys
-C:\swapfile.sys
 
-Process finished with exit code 0.
-```
-### Создание каталога
-```
-string path = @"C:\Users\mister pig\Documents";
-string subpath = @"program\avalon";
-DirectoryInfo dirInfo = new DirectoryInfo(path);
-if (!dirInfo.Exists)
+public class Foo
 {
-    dirInfo.Create();
+    public string description { get; set; }
+    public double value { get; set; }
 }
-dirInfo.CreateSubdirectory(subpath);
 ```
-Результат работы:
 ```
-Process finished with exit code 0.
+строка с пробелами, 123,15
+строка                    
+с переносом               
+строки, 456        
 ```
-### Получение информации о каталоге
+### Запись в CSV
 ```
-string dirName = "C:\\Program Files";
- 
-DirectoryInfo dirInfo = new DirectoryInfo(dirName);
- 
-Console.WriteLine($"Название каталога: {dirInfo.Name}");
-Console.WriteLine($"Полное название каталога: {dirInfo.FullName}");
-Console.WriteLine($"Время создания каталога: {dirInfo.CreationTime}");
-Console.WriteLine($"Корневой каталог: {dirInfo.Root}");
-```
-Результат работы:
-```
-Название каталога: Program Files
-Полное название каталога: C:\Program Files
-Время создания каталога: 07.12.2019 12:14:52
-Корневой каталог: C:\                       
+// использую не стандартный формат
+var config = new CsvConfiguration(
+    CultureInfo.InvariantCulture) { 
+        Delimiter = ";", 
+        HasHeaderRecord = false };
 
-Process finished with exit code 0.
-```
-### Удаление каталога
-```
-string dirName = @"C:\Users\mister pig\Documents\panda";
- 
-try
+// создаю тестовые данные
+var records = new List<Foo>
 {
-    DirectoryInfo dirInfo = new DirectoryInfo(dirName);
-    dirInfo.Delete(true);
-    Console.WriteLine("Каталог удален");
-}
-catch (Exception ex)
-{
-    Console.WriteLine(ex.Message);
-}
-```
-Результат работы:
-```
-Каталог удален
+    new Foo { 
+        description ="тест записи\nмногострочного текста",
+        value = 12.34 },
+    new Foo { 
+        description = "просто, текст, с запятыми", 
+        value = 0 }
+};
 
-Process finished with exit code 0.
-```
-### Перемещение каталога
-```
-string oldPath = @"C:\Users\mister pig\Documents\program";
-string newPath = @"C:\Users\mister pig\Documents\panda";
-DirectoryInfo dirInfo = new DirectoryInfo(oldPath);
-if (dirInfo.Exists && Directory.Exists(newPath) == false)
+using (var writer = new StreamWriter("./test3.csv"))
+using (var csv = new CsvWriter(writer, config))
 {
-    dirInfo.MoveTo(newPath);
+    csv.WriteRecords(records);
 }
 ```
-Результат работы:
 ```
-Process finished with exit code 0.
+"тест записи
+многострочного текста";12.34
+просто, текст, с запятыми;0
 ```
-## Работа с файлами. Классы File и FileInfo
-### Получение информации о файле
+## JSON
+### Пример сериализации
 ```
-string path = @"C:\Users\mister pig\Documents\panda\panda.txt";
-FileInfo fileInf = new FileInfo(path);
-if (fileInf.Exists)
+var person = new Person
 {
-    Console.WriteLine("Имя файла: {0}", fileInf.Name);
-    Console.WriteLine("Время создания: {0}", fileInf.CreationTime);
-    Console.WriteLine("Размер: {0}", fileInf.Length);
-}
-```
-Результат работы:
-```
-Имя файла: panda.txt
-Время создания: 08.03.2024 20:04:20
-Размер: 47                         
+    name = "Имя",
+    age = 18,
+    date = "2024-03-07"
+};
 
-Process finished with exit code 0.
-```
-### Удаление файла
-```
-string path = @"C:\Users\mister pig\Documents\panda\bamboo.txt";
-FileInfo fileInf = new FileInfo(path);
-if (fileInf.Exists)
-{
-   fileInf.Delete();
-   // альтернатива с помощью класса File
-   // File.Delete(path);
-}
-```
-Результат работы:
-```
-Process finished with exit code 0.
-```
-### Перемещение файла
-```
-string path = @"C:\Users\mister pig\Documents\panda\panda.txt";
-string newPath = @"C:\Users\mister pig\Documents\pororo.txt";
-FileInfo fileInf = new FileInfo(path);
-if (fileInf.Exists)
-{
-    fileInf.MoveTo(newPath);       
-    // альтернатива с помощью класса File
-    // File.Move(path, newPath);
-}
-```
-Результат работы:
-```
-Process finished with exit code 0.
-```
-### Копирование файла
-```
-string path = @"C:\Users\mister pig\Documents\panda\bamboo.txt";
-string newPath = @"C:\Users\mister pig\Documents\panda\totoro.txt";
-FileInfo fileInf = new FileInfo(path);
-if (fileInf.Exists)
-{
-    fileInf.CopyTo(newPath, true);      
-    // альтернатива с помощью класса File
-    // File.Copy(path, newPath, true);
-}
-```
-Результат работы:
-```
-Process finished with exit code 0.
-```
-## FileStream. Чтение и запись файла
-### Посмотрим на примере считывания-записи в текстовый файл:
-```
-using System;
-using System.IO;
- 
-namespace HelloApp
-{
-    class Program
-    {
-        static void Main(string[] args)
-        {
-            // создаем каталог для файла
-            string path = @"C:\Users\mister pig\Documents\panda";
-            DirectoryInfo dirInfo = new DirectoryInfo(path);
-            if (!dirInfo.Exists)
-            {
-                dirInfo.Create();
-            }
-            Console.WriteLine("Введите строку для записи в файл:");
-            string text = Console.ReadLine();
- 
-            // запись в файл
-            using (FileStream fstream = new FileStream($"{path}\note.txt", FileMode.OpenOrCreate))
-            {
-                // преобразуем строку в байты
-                byte[] array = System.Text.Encoding.Default.GetBytes(text);
-                // запись массива байтов в файл
-                fstream.Write(array, 0, array.Length);
-                Console.WriteLine("Текст записан в файл");
-            }
- 
-            // чтение из файла
-            using (FileStream fstream = File.OpenRead($"{path}\note.txt"))
-            {
-                // преобразуем строку в байты
-                byte[] array = new byte[fstream.Length];
-                // считываем данные
-                fstream.Read(array, 0, array.Length);
-                // декодируем байты в строку
-                string textFromFile = System.Text.Encoding.Default.GetString(array);
-                Console.WriteLine($"Текст из файла: {textFromFile}");
-            }
- 
-            Console.ReadLine();
-        }
-    }
-}
-```
-Результат работы:
-```
-Введите строку для записи в файл:
-panda
-Unhandled exception. System.IO.IOException: Синтаксическая ошибка в имени файла, имени папки или метке тома. : 'C:\Users\mister pig\Documents\panda       
-ote.txt'
-   at Microsoft.Win32.SafeHandles.SafeFileHandle.CreateFile(String fullPath, FileMode mode, FileAccess access, FileShare share, FileOptions options)      
-   at Microsoft.Win32.SafeHandles.SafeFileHandle.Open(String fullPath, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preal
-locationSize)
-   at System.IO.Strategies.OSFileStreamStrategy..ctor(String path, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 prealloca
-tionSize)
-   at System.IO.Strategies.FileStreamHelpers.ChooseStrategyCore(String path, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64
- preallocationSize)
-   at System.IO.Strategies.FileStreamHelpers.ChooseStrategy(FileStream fileStream, String path, FileMode mode, FileAccess access, FileShare share, Int32 b
-ufferSize, FileOptions options, Int64 preallocationSize)
-   at System.IO.FileStream..ctor(String path, FileMode mode)
-   at HelloApp.Program.Main(String[] args) in C:\Users\mister pig\RiderProjects\bamboo\bamboo\Program.cs:line 21
+string json = JsonConvert.SerializeObject(
+    person, Formatting.Indented);
 
-Process finished with exit code -532,462,766.
+Console.WriteLine(json);
 ```
-## изменим выше приведенную программу, применив асинхронные методы:
 ```
-using System;
-using System.IO;
-using System.Threading.Tasks;
- 
-namespace HelloApp
 {
-    class Program
-    {
-        static async Task Main(string[] args)
-        {
-            // создаем каталог для файла
-            string path = @"C:\Users\mister pig\Documents\panda";
-            DirectoryInfo dirInfo = new DirectoryInfo(path);
-            if (!dirInfo.Exists)
-            {
-                dirInfo.Create();
-            }
-            Console.WriteLine("Введите строку для записи в файл:");
-            string text = Console.ReadLine();
- 
-            // запись в файл
-            using (FileStream fstream = new FileStream($"{path}\note.txt", FileMode.OpenOrCreate))
-            {
-                byte[] array = System.Text.Encoding.Default.GetBytes(text);
-                // асинхронная запись массива байтов в файл
-                await fstream.WriteAsync(array, 0, array.Length);
-                Console.WriteLine("Текст записан в файл");
-            }
- 
-            // чтение из файла
-            using (FileStream fstream = File.OpenRead($"{path}\note.txt"))
-            {
-                byte[] array = new byte[fstream.Length];
-                // асинхронное чтение файла
-                await fstream.ReadAsync(array, 0, array.Length);
- 
-                string textFromFile = System.Text.Encoding.Default.GetString(array);
-                Console.WriteLine($"Текст из файла: {textFromFile}");
-            }
- 
-            Console.ReadLine();
-        }
-    }
+    "name": "Имя",
+    "age":18,
+    "date":"2024-03-07"
 }
 ```
-Результат работы:
+### Сериализация (Преобразование объекта в JSON-строку)
 ```
-Введите строку для записи в файл:
-panda
-Unhandled exception. System.IO.IOException: Синтаксическая ошибка в имени файла, имени папки или метке тома. : 'C:\Users\mister pig\Documents\panda       
-ote.txt'
-   at Microsoft.Win32.SafeHandles.SafeFileHandle.CreateFile(String fullPath, FileMode mode, FileAccess access, FileShare share, FileOptions options)      
-   at Microsoft.Win32.SafeHandles.SafeFileHandle.Open(String fullPath, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preal
-locationSize)
-   at System.IO.Strategies.OSFileStreamStrategy..ctor(String path, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 prealloca
-tionSize)
-   at System.IO.Strategies.FileStreamHelpers.ChooseStrategyCore(String path, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64
- preallocationSize)
-   at System.IO.Strategies.FileStreamHelpers.ChooseStrategy(FileStream fileStream, String path, FileMode mode, FileAccess access, FileShare share, Int32 b
-ufferSize, FileOptions options, Int64 preallocationSize)
-   at System.IO.FileStream..ctor(String path, FileMode mode)
-   at HelloApp.Program.Main(String[] args) in C:\Users\mister pig\RiderProjects\bamboo\bamboo\Program.cs:line 22
-   at HelloApp.Program.<Main>(String[] args)
+var PersonList = new List<Person>() {
+    new Person {name="Иванов", age=25, date=new DateTime(2021,1,1)},
+    new Person {name="Петров", age=35, date=new DateTime(2021,1,2)}
+};
 
-Process finished with exit code -532,462,766.
-```
-### Произвольный доступ к файлам
-```
-using System.IO;
-using System.Text;
- 
-class Program
-{
-    static void Main(string[] args)
-    {
-        string text = "hello world";
-             
-        // запись в файл
-        using (FileStream fstream = new FileStream(@"C:\Users\mister pig\Documents\panda\panda.txt", FileMode.OpenOrCreate))
-        {
-            // преобразуем строку в байты
-            byte[] input = Encoding.Default.GetBytes(text);
-            // запись массива байтов в файл
-            fstream.Write(input, 0, input.Length);
-            Console.WriteLine("Текст записан в файл");
- 
-            // перемещаем указатель в конец файла, до конца файла- пять байт
-            fstream.Seek(-5, SeekOrigin.End); // минус 5 символов с конца потока
- 
-            // считываем четыре символов с текущей позиции
-            byte[] output = new byte[4];
-            fstream.Read(output, 0, output.Length);
-            // декодируем байты в строку
-            string textFromFile = Encoding.Default.GetString(output);
-            Console.WriteLine($"Текст из файла: {textFromFile}"); // worl
- 
-            // заменим в файле слово world на слово house
-            string replaceText = "house";
-            fstream.Seek(-5, SeekOrigin.End); // минус 5 символов с конца потока
-            input = Encoding.Default.GetBytes(replaceText);
-            fstream.Write(input, 0, input.Length);
- 
-            // считываем весь файл
-            // возвращаем указатель в начало файла
-            fstream.Seek(0, SeekOrigin.Begin);
-            output = new byte[fstream.Length];
-            fstream.Read(output, 0, output.Length);
-            // декодируем байты в строку
-            textFromFile = Encoding.Default.GetString(output);
-            Console.WriteLine($"Текст из файла: {textFromFile}"); // hello house
-        }
-        Console.Read();
-    }
-}
-```
-Результат работы:
-```
-Текст записан в файл
-Текст из файла: worl       
-Текст из файла: hello house
+// создаем объект сериализатора, указав, что на входе 
+// будет МАССИВ объектов Person
+var Serializer = new DataContractJsonSerializer(typeof(Person[]));
 
-Process finished with exit code 0.
-```
-### Закрытие потока
-```
-FileStream fstream = null;
-try
+using (var streamWriter = new StreamWriter("test1.json"))
 {
-    fstream = new FileStream(@"C:\Users\mister pig\Documents\panda\baobab.txt", FileMode.OpenOrCreate);
-    // операции с потоком
-}
-catch(Exception ex)
-{
- 
-}
-finally
-{
-    if (fstream != null)
-        fstream.Close();
+    Serializer.WriteObject(
+        streamWriter.BaseStream,
+        // Преобразуем список (List) объектов в МАССИВ
+        PersonList.ToArray()
+    );
 }
 ```
-Результат работы:
 ```
-Process finished with exit code 0.
+[{"age":25,"date":"\/Date(1609448400000+0300)\/","name":"Иванов"},{"age":35,"date":"\/Date(1609534800000+0300)\/","name":"Петров"}]
 ```
-## Чтение и запись текстовых файлов. StreamReader и StreamWriter
-### запись в файл
+### Десериализация
 ```
-using System;
-using System.IO;
- 
-namespace HelloApp
+[DataContract]
+internal class Person
 {
-    class Program
-    {
-        static void Main(string[] args)
-        {
-            string writePath = @"C:\Users\mister pig\Documents\panda\totoro.txt";
- 
-            string text = "Привет мир!\nПока мир...";
-            try
-            {
-                using (StreamWriter sw = new StreamWriter(
-                    writePath, false, System.Text.Encoding.Default))
-                {
-                    sw.WriteLine(text);
-                }
- 
-                using (StreamWriter sw = new StreamWriter(
-                    writePath, true, System.Text.Encoding.Default))
-                {
-                    sw.WriteLine("Дозапись");
-                    sw.Write(4.5);
-                }
-                Console.WriteLine("Запись выполнена");
-            }
-            catch (Exception e)
-            {
-                Console.WriteLine(e.Message);
-            }
-        }
-    }
-}
-```
-Результат работы:
-```
-Запись выполнена
+    // создаем приватную переменную для хранения даты
+    private DateTime privateDate;
 
-Process finished with exit code 0.
-```
-### асинхронные версии методов:
-```
-using System;
-using System.IO;
-using System.Threading.Tasks;
- 
-namespace HelloApp
-{
-    class Program
-    {
-        static async Task Main(string[] args)
-        {
-            string writePath = @"C:\Users\mister pig\Documents\panda\totoro.txt";
- 
-            string text = "Привет мир!\nПока мир...";
-            try
-            {
-                using (StreamWriter sw = new StreamWriter(
-                    writePath, false, System.Text.Encoding.Default))
-                {
-                    await sw.WriteLineAsync(text);
-                }
- 
-                using (StreamWriter sw = new StreamWriter(
-                    writePath, true, System.Text.Encoding.Default))
-                {
-                    await sw.WriteLineAsync("Дозапись");
-                    await sw.WriteAsync("4,5");
-                }
-                Console.WriteLine("Запись выполнена");
-            }
-            catch (Exception e)
-            {
-                Console.WriteLine(e.Message);
-            }
-        }
-    }
-}
-```
-Результат работы:
-```
-Запись выполнена
+    [DataMember]
+    public string name { get; set; }
 
-Process finished with exit code 0.
-```
-### Сначала считаем текст полностью из ранее записанного файла:
-```
-using System;
-using System.IO;
-using System.Threading.Tasks;
- 
-string path = @"C:\Users\mister pig\Documents\panda\bamboo.txt";
-
-try
-{
-    using (StreamReader sr = new StreamReader(path))
-    {
-        Console.WriteLine(sr.ReadToEnd());
-    }
-    // асинхронное чтение
-    using (StreamReader sr = new StreamReader(path))
-    {
-        Console.WriteLine(await sr.ReadToEndAsync());
-    }
-}
-catch (Exception e)
-{
-    Console.WriteLine(e.Message);
-}
-```
-Результат работы:
-```
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-
-Process finished with exit code 0.
-```
-### Считаем текст из файла построчно:
-```
-string path= @"C:\Users\mister pig\Documents\panda\bamboo.txt";
-   
-using (StreamReader sr = new StreamReader(path, System.Text.Encoding.Default))
-{
-    string line;
-    while ((line = sr.ReadLine()) != null)
-    {
-        Console.WriteLine(line);
-    }
-}
-// асинхронное чтение
-using (StreamReader sr = new StreamReader(path, System.Text.Encoding.Default))
-{
-    string line;
-    while ((line = await sr.ReadLineAsync()) != null)
-    {
-        Console.WriteLine(line);
-    }
-}
-```
-Результат работы:
-```
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+    [DataMember]
+    public string age { get; set; }
 
-Process finished with exit code 0.
-```
-## Бинарные файлы. BinaryWriter и BinaryReader
-```
-struct State
-{
-    public string name;
-    public string capital;
-    public int area;
-    public double people;
- 
-    public State(string n, string c, int a, double p)
-    {
-        name = n;
-        capital = c;
-        people = p;
-        area = a;
-    }
-}
-class Program
-{
-    static void Main(string[] args)
-    {
-        State[] states = new State[2];
-        states[0] = new State("Германия", "Берлин",  357168,  80.8);
-        states[1] = new State("Франция", "Париж", 640679, 64.7);
- 
-        string path= @"C:\Users\mister pig\Documents\panda\baobab.txt";
- 
-        try
-        {
-            // создаем объект BinaryWriter
-            using (BinaryWriter writer = new BinaryWriter(File.Open(path, FileMode.OpenOrCreate)))
-            {
-                // записываем в файл значение каждого поля структуры
-                foreach (State s in states)
-                {
-                    writer.Write(s.name);
-                    writer.Write(s.capital);
-                    writer.Write(s.area);
-                    writer.Write(s.people);
-                }
-            }
-            // создаем объект BinaryReader
-            using (BinaryReader reader = new BinaryReader(File.Open(path, FileMode.Open)))
-            {
-                // пока не достигнут конец файла
-                // считываем каждое значение из файла
-                while (reader.PeekChar() > -1)
-                {
-                    string name = reader.ReadString();
-                    string capital = reader.ReadString();
-                    int area = reader.ReadInt32();
-                    double population = reader.ReadDouble();
- 
-                    Console.WriteLine("Страна: {0}  столица: {1}  площадь {2} кв. км   численность населения: {3} млн. чел.", 
-                        name, capital, area, population);
-                }
-            }
-        }
-        catch (Exception e)
-        {
-            Console.WriteLine(e.Message);
+    // создаем ПРИВАТНОЕ СТРОКОВОЕ свойство и с помощью атрибутов меняем ему имя для сериализатора
+    [DataMember(Name = "date")]
+    private string StringDate {
+        get {
+            return privateDate.ToString("yyyy-MM-dd");
         }
-        Console.ReadLine();
+        set {
+            // 2021-03-21
+            // 0123456789
+            privateDate = new DateTime(
+                Convert.ToInt32(value.Substring(0, 4)),
+                Convert.ToInt32(value.Substring(5, 2)),
+                Convert.ToInt32(value.Substring(8, 2))
+            );
+        } 
     }
-}
-```
-Результат работы:
-```
-Страна: Германия  столица: Берлин  площадь 357168 кв. км   численность населения: 80,8 млн. чел.
-Страна: Франция  столица: Париж  площадь 640679 кв. км   численность населения: 64,7 млн. чел.
-Unable to read beyond the end of the stream.
 
-Process finished with exit code 0.
-```
-## Бинарная сериализация. BinaryFormatter
-```
-using System;
-using System.IO;
-using System.Runtime.Serialization.Formatters.Binary;
- 
-namespace Serialization
-{
-    [Serializable]
-    class Person
-    {
-        public string Name { get; set; }
-        public int Age { get; set; }
- 
-        public Person(string name, int age)
-        {
-            Name = name;
-            Age = age;
-        }
-    }
-     
-    class Program
-    {
-        static void Main(string[] args)
-        {
-            // объект для сериализации
-            Person person = new Person("Tom", 29);
-            Console.WriteLine("Объект создан");
- 
-            // создаем объект BinaryFormatter
-            BinaryFormatter formatter = new BinaryFormatter();
-            // получаем поток, куда будем записывать сериализованный объект
-            using (FileStream fs = new FileStream("people.dat", FileMode.OpenOrCreate))
-            {
-                formatter.Serialize(fs, person);
- 
-                Console.WriteLine("Объект сериализован");
-            }
- 
-            // десериализация из файла people.dat
-            using (FileStream fs = new FileStream("people.dat", FileMode.OpenOrCreate))
-            {
-                Person newPerson = (Person)formatter.Deserialize(fs);
- 
-                Console.WriteLine("Объект десериализован");
-                Console.WriteLine($"Имя: {newPerson.Name} --- Возраст: {newPerson.Age}");
-            }
- 
-            Console.ReadLine();
-        }
+    // публичное свойство "дата" скрываем от сериализатора
+    [IgnoreDataMember]
+    public DateTime date { 
+        get { return privateDate; }
+        set { privateDate = value;  } 
     }
 }
 ```
-Результат работы:
-```
-Объект создан
-Объект сериализован
-Объект десериализован   
-Имя: Tom --- Возраст: 29
-```
-
-
-
-
-
-
-