将内部带有矢量的结构保存/读取到二进制文件中
Saving/reading a struct with a vector inside into a binary file
我想将以下结构保存到二进制文件中:
struct Usuario{
char nombre[256];
char apellido[256];
char ingresos[256];
std::vector<Bill> manejador_facturas;
};
比尔也是一个结构体:
struct Bill{
float monto;
int dia;
int mes;
int anio;
char empresa[256];
};
我试图将信息写入二进制文件的是:
void Perfil::GuardarEnBinario(std::ostream &archivo) {
Usuario reg;
Bill auxiliar;
strcpy(reg.nombre, nombre.c_str());
strcpy(reg.apellido, apellido.c_str());
strcpy(reg.ingresos, ingresos.c_str());
for(size_t i = 0; i < manejador_facturas.size(); i++){
strcpy(auxiliar.empresa, manejador_facturas[i].empresa);
auxiliar.monto = manejador_facturas[i].monto;
auxiliar.dia = manejador_facturas[i].dia;
auxiliar.mes = manejador_facturas[i].mes;
auxiliar.anio = manejador_facturas[i].anio;
reg.manejador_facturas.push_back(auxiliar);
}
archivo.write((char*)®, sizeof(reg));
}
起初我认为它有效,因为.exe工作正常,但问题是我保存的信息在我尝试查看它时根本没有显示(不知道.bin是否损坏还是什么(。读取结构的代码为:
void Perfil::LeerDesdeBinario(std::istream &archivo) {
Usuario reg;
Bill auxiliar;
archivo.read((char*)®, sizeof(reg));
nombre = reg.nombre;
apellido = reg.apellido;
ingresos = reg.ingresos;
for(size_t i = 0; i < reg.manejador_facturas.size(); i++){
strcpy(auxiliar.empresa, reg.manejador_facturas[i].empresa);
auxiliar.monto = reg.manejador_facturas[i].monto;
auxiliar.dia = reg.manejador_facturas[i].dia;
auxiliar.mes = reg.manejador_facturas[i].mes;
auxiliar.anio = reg.manejador_facturas[i].anio;
manejador_facturas.push_back(auxiliar);
}
}
欢迎来到堆栈溢出。编写和阅读复杂的结构并不是那么容易。(在前进到这个类型之前,你应该尝试更简单的类型。
让我们从char[256]
开始:
void GuardarEnBinario(char *A, std::ostream &archivo)
{
ofstream fout("data", ios::out | ios::binary);
archivo.write(A, 256);
}
void LeerDesdeBinario(char *B, std::istream &archivo)
{
archivo.read(B, 256);
}
在继续之前对此进行测试。
现在尝试一个Bill
:
void GuardarEnBinario(Bill &B, std::ostream &archivo)
{
archivo.write((char*)&B.monto, sizeof(float));
archivo.write((char*)&B.dia, sizeof(int));
GuardarEnBinario(B.empresa, archivo);
}
void LeerDesdeBinario(Bill &B, std::istream &archivo)
{
archivo.read((char*)&B.monto, sizeof(float));
archivo.read((char*)&B.dia, sizeof(int));
LeerDesdeBinario(B.empresa, archivo);
}
(我省略了一些字段;应该清楚如何处理它们。
在继续之前,请对此进行测试,并确保您理解它。
现在尝试一个vector<Bill>
:
void GuardarEnBinario(std::vector<Bill> &V, std::ostream &archivo)
{
unsigned int n = V.size();
cout << n << endl;
archivo.write((char *) &n, sizeof(unsigned int));
for(unsigned int k=0; k<n; ++k)
{
GuardarEnBinario(V[k], archivo);
}
}
void LeerDesdeBinario(std::vector<Bill> &V, std::istream &archivo)
{
unsigned int n;
archivo.read((char *) &n, sizeof(unsigned int));
cout << n << endl;
Bill B;
for(unsigned int k=0; k<n; ++k)
{
LeerDesdeBinario(B, archivo);
V.push_back(B);
}
}
一旦你完成了这项工作,你的其余任务应该很容易。
相关文章:
- 将内部带有矢量的结构保存/读取到二进制文件中
- 将结构向量保存到文件中,并从C++文件中读取结构向量
- 可视化C++从文件中保存/读取多个变量
- 从文本文件读取并保存到列表
- C++读取大文件并将其保存到字符串中,然后删除特定的随机单词
- 无法从Java读取C++中保存的Opencv Mat映像
- 如何将QGraphicsItem QList保存到文件中,然后读取它?Qt c++
- 从 JSON 读取和保存数据
- 如何从文件中读取 100x24 矩阵并将其作为浮点矩阵保存在内存中?
- 我们可以从 TXT 文件中读取数据并使用 C 和 C++ 将其保存到 SQL 数据库吗?
- C++两次从文件保存对象读取多重继承
- 无法读取保存的 TensorFlow 模型(无法查找标头条目)
- 如何使用 STL C++读取文件和保存连字符
- 在给定路径中读取保存的EVTX文件
- 从串行读取并分别保存值
- C++VTK从多个文件中读取和保存数据
- 从二进制文件中保存的 4 字节双精度读取 8 字节双精度
- C :如何从二进制文件中读取特定数量的字节并将其保存到UINT16_T
- 将结构保存在二进制文件中,仅在C 中读取值
- 如何在文件中保存/读取数据数组 (C++)