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

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

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

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

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

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

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

textual
Листинг программы
  1.  struct StatePerson
  2.     {
  3.         public string id;
  4.         public string name;
  5.         public string firstName;
  6.         public string LastName;
  7.         public string role;
  8.         public string login;
  9.         public string password;
  10.  
  11.         public StatePerson(string _id, string _name, string _firstName, string _LastName, string _role, string _login, string _password)
  12.         {
  13.             id = _id;
  14.             name = _name;
  15.             firstName = _firstName;
  16.             LastName = _LastName;
  17.             role = _role;
  18.             login = _login;
  19.             password = _password;
  20.         }
  21.     }
  22.  
  23.     struct StateHaircut
  24.     {
  25.         public string id;
  26.         public string name;
  27.         public int cost;
  28.  
  29.         public StateHaircut(string _id, string _name, int _cost)
  30.         {
  31.             id = _id;
  32.             name = _name;
  33.             cost = _cost;
  34.         }
  35.     }
  36.  
  37.     class Display
  38.     {
  39.         public void WritePerson(string path)
  40.         {
  41.             StatePerson[] states = new StatePerson[1];
  42.  
  43.             states[0] = new StatePerson("h", "Aleksey", "familiya", "otch", "Администратор", "Symbx", "123");
  44.  
  45.  
  46.             using (BinaryWriter writer = new BinaryWriter(File.Open(path, FileMode.OpenOrCreate)))
  47.             {
  48.                 // записываем в файл значение каждого поля структуры
  49.                 foreach (StatePerson s in states)
  50.                 {
  51.                     writer.Write(s.id);
  52.                     writer.Write(s.name);
  53.                     writer.Write(s.firstName);
  54.                     writer.Write(s.LastName);
  55.                     writer.Write(s.role);
  56.                     writer.Write(s.login);
  57.                     writer.Write(s.password);
  58.                 }
  59.             }
  60.         }
  61.  
  62.         public void WriteHaircut(string path)
  63.         {
  64.             StateHaircut[] states = new StateHaircut[1];
  65.  
  66.             states[0] = new StateHaircut("g", "Classical", 15);
  67.  
  68.             using (BinaryWriter writer = new BinaryWriter(File.Open(path, FileMode.OpenOrCreate)))
  69.             {
  70.                 // записываем в файл значение каждого поля структуры
  71.                 foreach (StateHaircut s in states)
  72.                 {
  73.                     writer.Write(s.id);
  74.                     writer.Write(s.name);
  75.                     writer.Write(s.cost);
  76.                 }
  77.             }
  78.         }
  79.  
  80.         public void OutputPerson(string path)
  81.         {
  82.          
  83.  
  84.             // создаем объект BinaryReader
  85.             using (BinaryReader reader = new BinaryReader(File.Open(path, FileMode.Open)))
  86.             {
  87.                 // пока не достигнут конец файла
  88.                 // считываем каждое значение из файла
  89.                 while (reader.PeekChar() > -1)
  90.                 {
  91.                     string id = reader.ReadString();
  92.                     string name = reader.ReadString();
  93.                     string firstName = reader.ReadString();
  94.                     string LastName = reader.ReadString();
  95.                     string role = reader.ReadString();
  96.                     string login = reader.ReadString();
  97.                     string password = reader.ReadString();
  98.  
  99.                     Console.WriteLine("ID: {0}  имя: {1}  фамилия: {2} отчество: {3} логин: {4} роль: {5} пароль: {6}",
  100.                         id, name, firstName, LastName, role, login, password);
  101.                 }
  102.             }
  103.         }
  104.  
  105.         public void OutputHaircut(string path)
  106.         {
  107.  
  108.  
  109.             // создаем объект BinaryReader
  110.             using (BinaryReader reader = new BinaryReader(File.Open(path, FileMode.Open)))
  111.             {
  112.                 // пока не достигнут конец файла
  113.                 // считываем каждое значение из файла
  114.                 while (reader.PeekChar() > -1)
  115.                 {
  116.                     string id = reader.ReadString();
  117.                     string name = reader.ReadString();
  118.                     int cost = reader.ReadInt32();
  119.  
  120.                     Console.WriteLine("ID: {0}  имя: {1}  цена: {2}",
  121.                         id, name, cost);
  122.                 }
  123.             }
  124.         }
  125.     }
  126.  
  127.     class Program
  128.     {
  129.         static void Main(string[] args)
  130.         {
  131.             string path= @"haircut.dat";
  132.  
  133.                 Display dis = new Display();
  134.  
  135.             dis.WriteHaircut(path);
  136.             dis.WritePerson(path);
  137.             dis.OutputPerson(path);
  138.             dis.OutputHaircut(path);
  139.  
  140.            
  141.             Console.ReadLine();
  142.         }
  143.     }

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


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

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

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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут