我想在写入过程完成后从我的二进制文件中读取数据,并且在没有写入过程的情况下读取数据

Posted

技术标签:

【中文标题】我想在写入过程完成后从我的二进制文件中读取数据,并且在没有写入过程的情况下读取数据【英文标题】:I wanna read data from my binary file after the writing process complete and also read data without the writing process 【发布时间】:2015-08-29 05:26:41 【问题描述】:

这是我编写二进制文件的部分代码。 在这里,我传递了一个包含文本格式数据或二进制数据的二维向量表。如果主表包含二进制数据,我想读取并将该数据加载到一个向量表中。我已经做到了,如果数据是文本文件,我可以从该文件加载该数据,但它是一个二进制数据,我不知道如何加载。我也在使用索引表。这意味着该表包含主表中每个字段的大小。

例如: emp.idx

字段 - 大小

名称 - 20

年龄 - 2

性- 10

mainTbl - 包含二进制数据的主表。

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;

 

【问题讨论】:

idxTbl 是什么结构?什么是count_t?什么错误? 我的idx表的结构如下,没有错误,并且coun_t是vector count_t; idxTbl[recNum].fcode=f[0]; idxTbl[recNum].fdesc=f[1]; idxTbl[recNum].fstartidx=atoi(f[2].c_str()); idxTbl[recNum].fsize=atoi(f[3].c_str()); idxTbl[recNum].ftype=f[4]; idxTbl[recNum].precision=atoi(f[5].c_str()); idxTbl[recNum].fcons= (f[6]); idxTbl[recNum].notnull= (f[7]); idxTbl[recNum].ronly= (f[8]); idxTbl[recNum].res1=f[9]; idxTbl[recNum].res2=f[10]; idxTbl[recNum].cel=atof(f[11].c_str()); idxTbl[recNum].flr=atof(f[12].c_str()); 【参考方案1】:

你的代码写错了

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());

【讨论】:

@ArunSelvaSuresh 真可惜,如果你说 what 不起作用,那么也许有人可以帮助你。

以上是关于我想在写入过程完成后从我的二进制文件中读取数据,并且在没有写入过程的情况下读取数据的主要内容,如果未能解决你的问题,请参考以下文章

从 excel 读取数据并使用 specflow 写入特征文件

在二进制文件中读取和写入字符串c ++

python如何在完成每个循环后从列表中清除项目?

如何从 servlet-filter 写入文件并在 Eclipse 中读取它?

求配置FPGA时 读取bit文件并把配置数据写入到FPGA中的详细过程

尝试从二进制文件读取时引发违规