Работа со структурами в бинарном файле - 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();
}
}