我想在写入过程完成后从我的二进制文件中读取数据,也想在没有写入过程的情况下读取数据
I wanna read data from my binary file after the writing process complete and also read data without the writing process
这是我编写二进制文件的部分代码。
在这里,我传递了一个包含文本格式数据或二进制数据的二维向量 table。如果 main table 包含二进制数据,我想读取并将该数据加载到一个向量 table 中。我已经做到了,如果数据是文本文件,我可以从该文件加载该数据,但它是二进制数据,我不知道如何加载。我也在使用索引 table。这意味着 table 包含主 table 中每个字段的大小。
例如:
emp.idx
字段 - 尺寸
姓名 - 20
年龄 - 2
性别- 10
mainTbl - main table 包含二进制数据。
typedef vector <string> record_t;
typedef vector <record_t> table_t;
table_t mainTbl;
table_t fileStruct::FormatData(table_t &mainTbl)
{
fstream fs("emp.bin",ios::binary | ios::out | ios::in);
size_t rowLength=mainTbl.size();
size_t colLength=idxTbl.size();
count_t colSize;
for (size_t j=0;j<colLength;j++)
{
colSize.push_back(idxTbl[j].fsize);
//cout<<"colum size "<<colSize[j]<<endl;
}
for(size_t i=0;i<rowLength;i++)
{
for (size_t j=0;j<colLength;j++)
{
string data=mainTbl[i].at(j);
data.resize(colSize.at(j),' ');
mainTbl[i].at(j)=data;
int len = data.length();
fs.write(reinterpret_cast<char*> (&len),len);
fs.write(const_cast<char*>(data.c_str()),len);
//cout<<data;
//fu<<mainTbl[i].at(j);
}
fs<<endl;
//cout<<endl;
}
return mainTbl;
}
你写代码有误
fs.write(reinterpret_cast<char*> (&len),len);
应该是
fs.write(reinterpret_cast<char*>(&len), sizeof len);
要阅读,您可以读入一个临时向量并从中创建字符串。
vector<char> temp;
fs.read(reinterpret_cast<char*>(&len), sizeof len);
if (len > 0)
{
temp.resize(len);
fs.read(&temp[0], len);
}
mainTbl[i].at(j) = string(temp.begin(), temp.end());
这是我编写二进制文件的部分代码。 在这里,我传递了一个包含文本格式数据或二进制数据的二维向量 table。如果 main table 包含二进制数据,我想读取并将该数据加载到一个向量 table 中。我已经做到了,如果数据是文本文件,我可以从该文件加载该数据,但它是二进制数据,我不知道如何加载。我也在使用索引 table。这意味着 table 包含主 table 中每个字段的大小。
例如: emp.idx
字段 - 尺寸
姓名 - 20
年龄 - 2
性别- 10
mainTbl - main table 包含二进制数据。
typedef vector <string> record_t;
typedef vector <record_t> table_t;
table_t mainTbl;
table_t fileStruct::FormatData(table_t &mainTbl)
{
fstream fs("emp.bin",ios::binary | ios::out | ios::in);
size_t rowLength=mainTbl.size();
size_t colLength=idxTbl.size();
count_t colSize;
for (size_t j=0;j<colLength;j++)
{
colSize.push_back(idxTbl[j].fsize);
//cout<<"colum size "<<colSize[j]<<endl;
}
for(size_t i=0;i<rowLength;i++)
{
for (size_t j=0;j<colLength;j++)
{
string data=mainTbl[i].at(j);
data.resize(colSize.at(j),' ');
mainTbl[i].at(j)=data;
int len = data.length();
fs.write(reinterpret_cast<char*> (&len),len);
fs.write(const_cast<char*>(data.c_str()),len);
//cout<<data;
//fu<<mainTbl[i].at(j);
}
fs<<endl;
//cout<<endl;
}
return mainTbl;
}
你写代码有误
fs.write(reinterpret_cast<char*> (&len),len);
应该是
fs.write(reinterpret_cast<char*>(&len), sizeof len);
要阅读,您可以读入一个临时向量并从中创建字符串。
vector<char> temp;
fs.read(reinterpret_cast<char*>(&len), sizeof len);
if (len > 0)
{
temp.resize(len);
fs.read(&temp[0], len);
}
mainTbl[i].at(j) = string(temp.begin(), temp.end());