Загрузка данных


```csharp
using System;
using System.IO;
using System.Text;

namespace BinaryFileTasks
{
    // Структура для сотрудника (задания 2 и 3)
    [Serializable]
    struct Employee
    {
        public string Name;
        public int Age;
        public double Salary;

        public Employee(string name, int age, double salary)
        {
            Name = name;
            Age = age;
            Salary = salary;
        }

        public override string ToString()
        {
            return $"Имя: {Name}, Возраст: {Age}, Зарплата: {Salary:C}";
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Console.OutputEncoding = Encoding.UTF8;
            
            // Задание 1
            Task1();
            
            // Задание 2
            Task2();
            
            // Задание 3
            Task3();
            
            // Задание 4
            Task4();
        }

        // 1. Запись массива из 10 чисел в двоичный файл и чтение
        static void Task1()
        {
            Console.WriteLine("\n=== Задание 1 ===");
            string filePath = "numbers.bin";
            
            // Создаём массив из 10 целых чисел
            int[] numbers = new int[10];
            for (int i = 0; i < numbers.Length; i++)
                numbers[i] = i + 1; // числа от 1 до 10

            // Запись в двоичный файл
            using (BinaryWriter writer = new BinaryWriter(File.Open(filePath, FileMode.Create)))
            {
                foreach (int num in numbers)
                    writer.Write(num);
            }
            Console.WriteLine("Массив чисел записан в файл.");

            // Чтение из файла
            int[] readNumbers = new int[10];
            using (BinaryReader reader = new BinaryReader(File.Open(filePath, FileMode.Open)))
            {
                for (int i = 0; i < readNumbers.Length; i++)
                    readNumbers[i] = reader.ReadInt32();
            }
            
            Console.WriteLine("Прочитанные числа: " + string.Join(", ", readNumbers));
        }

        // 2. Запись нескольких структур Employee в двоичный файл и чтение
        static void Task2()
        {
            Console.WriteLine("\n=== Задание 2 ===");
            string filePath = "employees.dat";
            
            // Создаём несколько сотрудников
            Employee[] employees = new Employee[]
            {
                new Employee("Иван Иванов", 30, 50000),
                new Employee("Мария Петрова", 25, 60000),
                new Employee("Сергей Сидоров", 35, 75000)
            };

            // Запись в двоичный файл
            using (BinaryWriter writer = new BinaryWriter(File.Open(filePath, FileMode.Create)))
            {
                foreach (var emp in employees)
                {
                    writer.Write(emp.Name);
                    writer.Write(emp.Age);
                    writer.Write(emp.Salary);
                }
            }
            Console.WriteLine("Данные сотрудников записаны в файл.");

            // Чтение из файла
            Console.WriteLine("Прочитанные сотрудники:");
            using (BinaryReader reader = new BinaryReader(File.Open(filePath, FileMode.Open)))
            {
                while (reader.BaseStream.Position < reader.BaseStream.Length)
                {
                    string name = reader.ReadString();
                    int age = reader.ReadInt32();
                    double salary = reader.ReadDouble();
                    Employee emp = new Employee(name, age, salary);
                    Console.WriteLine(emp);
                }
            }
        }

        // 3. Запись массива структур в двоичный файл и чтение
        static void Task3()
        {
            Console.WriteLine("\n=== Задание 3 ===");
            string filePath = "employees_array.bin";
            
            // Массив структур
            Employee[] employees = new Employee[]
            {
                new Employee("Анна Смирнова", 28, 48000),
                new Employee("Дмитрий Козлов", 40, 90000),
                new Employee("Елена Новикова", 33, 67000)
            };

            // Запись всего массива (сначала количество элементов, затем сами структуры)
            using (BinaryWriter writer = new BinaryWriter(File.Open(filePath, FileMode.Create)))
            {
                writer.Write(employees.Length); // записываем длину массива
                foreach (var emp in employees)
                {
                    writer.Write(emp.Name);
                    writer.Write(emp.Age);
                    writer.Write(emp.Salary);
                }
            }
            Console.WriteLine("Массив структур записан в файл.");

            // Чтение массива из файла
            Employee[] readEmployees;
            using (BinaryReader reader = new BinaryReader(File.Open(filePath, FileMode.Open)))
            {
                int count = reader.ReadInt32(); // считываем длину
                readEmployees = new Employee[count];
                for (int i = 0; i < count; i++)
                {
                    string name = reader.ReadString();
                    int age = reader.ReadInt32();
                    double salary = reader.ReadDouble();
                    readEmployees[i] = new Employee(name, age, salary);
                }
            }
            
            Console.WriteLine("Прочитанный массив структур:");
            foreach (var emp in readEmployees)
                Console.WriteLine(emp);
        }

        // 4. Копирование двоичного файла в другой
        static void Task4()
        {
            Console.WriteLine("\n=== Задание 4 ===");
            string sourceFile = "source.bin";
            string destFile = "destination.bin";
            
            // Создаём исходный файл с какими-нибудь данными для демонстрации
            using (BinaryWriter writer = new BinaryWriter(File.Open(sourceFile, FileMode.Create)))
            {
                for (int i = 0; i < 100; i++)
                    writer.Write(i);
            }
            Console.WriteLine($"Создан исходный файл {sourceFile} с 100 целыми числами.");

            // Копирование
            using (FileStream sourceStream = File.OpenRead(sourceFile))
            using (FileStream destStream = File.Create(destFile))
            {
                sourceStream.CopyTo(destStream);
            }
            Console.WriteLine($"Файл скопирован в {destFile}.");

            // Проверка: прочитаем из скопированного файла первые несколько чисел
            using (BinaryReader reader = new BinaryReader(File.Open(destFile, FileMode.Open)))
            {
                Console.Write("Первые 5 чисел из копии: ");
                for (int i = 0; i < 5 && reader.BaseStream.Position < reader.BaseStream.Length; i++)
                    Console.Write(reader.ReadInt32() + " ");
                Console.WriteLine();
            }
        }
    }
}
```