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