Загрузка данных
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();
}
}