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


using System;
using System.IO;

class Program
{
    // Структура для сотрудника (используется в заданиях 2 и 3)
    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:F2} руб.";
        }
    }

    static void Main()
    {
        Console.OutputEncoding = System.Text.Encoding.UTF8;

        // Задание 1
        Task1_ArrayOfNumbers();

        // Задание 2
        Task2_EmployeeRecords();

        // Задание 3
        Task3_ArrayOfStructures();

        // Задание 4
        Task4_CopyBinaryFile();

        Console.WriteLine("\nВсе задания выполнены. Нажмите любую клавишу для выхода.");
        Console.ReadKey();
    }

    // 1. Запись массива из 10 чисел в двоичный файл и чтение
    static void Task1_ArrayOfNumbers()
    {
        Console.WriteLine("\n=== ЗАДАНИЕ 1 ===");
        string fileName = "numbers.bin";

        // Записываем числа
        int[] numbersToWrite = { 10, 20, 30, 40, 50, 60, 70, 80, 90, 100 };
        using (BinaryWriter writer = new BinaryWriter(File.Open(fileName, FileMode.Create)))
        {
            foreach (int num in numbersToWrite)
                writer.Write(num);
        }
        Console.WriteLine($"Числа записаны в файл '{fileName}'.");

        // Читаем числа
        int[] readNumbers = new int[10];
        using (BinaryReader reader = new BinaryReader(File.Open(fileName, FileMode.Open)))
        {
            for (int i = 0; i < readNumbers.Length; i++)
                readNumbers[i] = reader.ReadInt32();
        }

        Console.WriteLine("Прочитанные числа: " + string.Join(", ", readNumbers));
    }

    // 2. Запись нескольких структур Employee и чтение
    static void Task2_EmployeeRecords()
    {
        Console.WriteLine("\n=== ЗАДАНИЕ 2 ===");
        string fileName = "employees.dat";

        // Создаём список сотрудников
        Employee[] employees = new Employee[]
        {
            new Employee("Иван Петров", 28, 45000),
            new Employee("Ольга Смирнова", 32, 67000),
            new Employee("Алексей Кузнецов", 41, 82000)
        };

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

        // Читаем из файла
        Console.WriteLine("Прочитанные сотрудники:");
        using (BinaryReader reader = new BinaryReader(File.Open(fileName, 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_ArrayOfStructures()
    {
        Console.WriteLine("\n=== ЗАДАНИЕ 3 ===");
        string fileName = "employees_array.bin";

        // Массив структур
        Employee[] employees = new Employee[]
        {
            new Employee("Мария Лебедева", 26, 55000),
            new Employee("Дмитрий Васильев", 35, 72000),
            new Employee("Екатерина Павлова", 29, 61000),
            new Employee("Андрей Соколов", 38, 89000)
        };

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

        // Чтение массива
        Employee[] loadedEmployees;
        using (BinaryReader reader = new BinaryReader(File.Open(fileName, FileMode.Open)))
        {
            int count = reader.ReadInt32();
            loadedEmployees = new Employee[count];
            for (int i = 0; i < count; i++)
            {
                string name = reader.ReadString();
                int age = reader.ReadInt32();
                double salary = reader.ReadDouble();
                loadedEmployees[i] = new Employee(name, age, salary);
            }
        }

        Console.WriteLine("Прочитанный массив структур:");
        foreach (Employee emp in loadedEmployees)
            Console.WriteLine(emp);
    }

    // 4. Копирование двоичного файла в другой
    static void Task4_CopyBinaryFile()
    {
        Console.WriteLine("\n=== ЗАДАНИЕ 4 ===");
        string sourceFile = "source.bin";
        string destFile = "destination.bin";

        // Создаём исходный файл (для примера – 50 случайных чисел)
        Random rand = new Random();
        using (BinaryWriter writer = new BinaryWriter(File.Open(sourceFile, FileMode.Create)))
        {
            for (int i = 0; i < 50; i++)
                writer.Write(rand.Next(1, 1000));
        }
        Console.WriteLine($"Исходный файл '{sourceFile}' создан (50 случайных чисел).");

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

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