Работа со структурами в бинарном файле - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, прошу мне помочь с одной проблемой. При работе над файлом, я создал структуру:
struct StateHaircut
    {
        public string id;
        public string name;
        public int cost;
 
        public StateHaircut(string _id, string _name, int _cost)
        {
            id = _id;
            name = _name;
            cost = _cost;
        }
    }
И записал в файл:
public void WriteHaircut(string path)
        {
            StateHaircut[] states = new StateHaircut[1];
 
            states[0] = new StateHaircut("g", "Classical", 15);
 
            using (BinaryWriter writer = new BinaryWriter(File.Open(path, FileMode.OpenOrCreate)))
            {
                // записываем в файл значение каждого поля структуры
                foreach (StateHaircut s in states)
                {
                    writer.Write(s.id);
                    writer.Write(s.name);
                    writer.Write(s.cost);
                }
            }
        }
Произвожу вывод без проблем:
 public void OutputHaircut(string path)
        {
            // создаем объект BinaryReader
            using (BinaryReader reader = new BinaryReader(File.Open(path, FileMode.Open)))
            {
                // пока не достигнут конец файла
                // считываем каждое значение из файла
                while (reader.PeekChar() > -1)
                {
                    string id = reader.ReadString();
                    string name = reader.ReadString();
                    int cost = reader.ReadInt32();
 
                    Console.WriteLine("ID: {0}  имя: {1}  цена: {2}",
                        id, name, cost);
                }
            }
        }
Так все работает, но стоит мне добавить еще одну структуру и по аналогии все записать и вывести уже в существующий файл с информацией, как вылезает ошибка:

Слишком много байт в типе, который должен быть в 7-разрядной кодировке Int32.

Вопрос, как мне работать с несколькими структурами? Записывать и выводить определенную информацию через нужные мне структуры? Как пример: Struct Person, Order т.д...
Или я так понял это невозможно. Нужно каждую структуру использовать в отдельном файле?

Решение задачи: «Работа со структурами в бинарном файле»

textual
Листинг программы
 struct StatePerson
    {
        public string id;
        public string name;
        public string firstName;
        public string LastName;
        public string role;
        public string login;
        public string password;
 
        public StatePerson(string _id, string _name, string _firstName, string _LastName, string _role, string _login, string _password)
        {
            id = _id;
            name = _name;
            firstName = _firstName;
            LastName = _LastName;
            role = _role;
            login = _login;
            password = _password;
        }
    }
 
    struct StateHaircut
    {
        public string id;
        public string name;
        public int cost;
 
        public StateHaircut(string _id, string _name, int _cost)
        {
            id = _id;
            name = _name;
            cost = _cost;
        }
    }
 
    class Display
    {
        public void WritePerson(string path)
        {
            StatePerson[] states = new StatePerson[1];
 
            states[0] = new StatePerson("h", "Aleksey", "familiya", "otch", "Администратор", "Symbx", "123");
 
 
            using (BinaryWriter writer = new BinaryWriter(File.Open(path, FileMode.OpenOrCreate)))
            {
                // записываем в файл значение каждого поля структуры
                foreach (StatePerson s in states)
                {
                    writer.Write(s.id);
                    writer.Write(s.name);
                    writer.Write(s.firstName);
                    writer.Write(s.LastName);
                    writer.Write(s.role);
                    writer.Write(s.login);
                    writer.Write(s.password);
                }
            }
        }
 
        public void WriteHaircut(string path)
        {
            StateHaircut[] states = new StateHaircut[1];
 
            states[0] = new StateHaircut("g", "Classical", 15);
 
            using (BinaryWriter writer = new BinaryWriter(File.Open(path, FileMode.OpenOrCreate)))
            {
                // записываем в файл значение каждого поля структуры
                foreach (StateHaircut s in states)
                {
                    writer.Write(s.id);
                    writer.Write(s.name);
                    writer.Write(s.cost);
                }
            }
        }
 
        public void OutputPerson(string path)
        {
          
 
            // создаем объект BinaryReader
            using (BinaryReader reader = new BinaryReader(File.Open(path, FileMode.Open)))
            {
                // пока не достигнут конец файла
                // считываем каждое значение из файла
                while (reader.PeekChar() > -1)
                {
                    string id = reader.ReadString();
                    string name = reader.ReadString();
                    string firstName = reader.ReadString();
                    string LastName = reader.ReadString();
                    string role = reader.ReadString();
                    string login = reader.ReadString();
                    string password = reader.ReadString();
 
                    Console.WriteLine("ID: {0}  имя: {1}  фамилия: {2} отчество: {3} логин: {4} роль: {5} пароль: {6}",
                        id, name, firstName, LastName, role, login, password);
                }
            }
        }
 
        public void OutputHaircut(string path)
        {
 
 
            // создаем объект BinaryReader
            using (BinaryReader reader = new BinaryReader(File.Open(path, FileMode.Open)))
            {
                // пока не достигнут конец файла
                // считываем каждое значение из файла
                while (reader.PeekChar() > -1)
                {
                    string id = reader.ReadString();
                    string name = reader.ReadString();
                    int cost = reader.ReadInt32();
 
                    Console.WriteLine("ID: {0}  имя: {1}  цена: {2}",
                        id, name, cost);
                }
            }
        }
    }
 
    class Program
    {
        static void Main(string[] args)
        { 
            string path= @"haircut.dat";
 
                Display dis = new Display();
 
            dis.WriteHaircut(path);
            dis.WritePerson(path);
            dis.OutputPerson(path);
            dis.OutputHaircut(path);
 
           
            Console.ReadLine();
        }
    }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4 из 5