可变长数据结构的文件读写

来源:互联网 发布:淘宝上怎么搜sis账号 编辑:程序博客网 时间:2024/05/10 17:36

可变长数据结构,也是比较实用的,尤其在内存需要节俭的时候。

比如下面的数据结构,由于string长度是不确定的

typedef struct SMagicDat{int         id; std::string str1; std::string str2; }SMagicDat;
像这样的变长数据写入文件后,回读就比较麻烦。


本次操作实例一枚,仅作参考

int main(){fstream fout("bb.txt", ios::binary|ios::out); if (fout == 0)return -1; int iCnt = 0; fout.write((char*)&iCnt, sizeof(iCnt)); fout.close(); typedef struct SVarlength{int id; int id2;int len; }SVarlength;typedef struct SMagicDat{int         id; std::string str1; std::string str2; }SMagicDat;fstream fout2("bb.txt", ios::binary|ios::in|ios::out); if (fout2 == 0)return -1; int iCnt2 = 0; fout2.read((char*)&iCnt2, sizeof(iCnt2)); printf("icnt2=%d.\n", iCnt2); SDat src_dat[10];char szTemp[100] = {0}; string strVar; SVarlength var; char chSTX = 0x02; char chETX = 0x03; fout2.seekp(sizeof(iCnt2), ios::beg); for(int ii=0; ii<10; ii++){src_dat[ii].id = 100+ii; sprintf(szTemp, "id=%d,str1=%d.", src_dat[ii].id, src_dat[ii].id); src_dat[ii].str1 = szTemp; sprintf(szTemp, "id=%d,str2=%d.%d=str2", src_dat[ii].id, src_dat[ii].id, src_dat[ii].id);src_dat[ii].str2 = szTemp; strVar = chSTX + src_dat[ii].str1 + chETX \+ chSTX + src_dat[ii].str2 + chETX; var.id = src_dat[ii].id; var.id2 = src_dat[ii].id + 100; var.len = strVar.length(); fout2.write((char*)&var, sizeof(var)); fout2.write(strVar.c_str(), strVar.length()); }// iCnt2 += 10; fout2.seekp(0, ios::beg); fout2.write((char*)&iCnt2, sizeof(iCnt2)); fout2.close(); fstream fin("bb.txt", ios::binary|ios::in); if (fin == 0)return -1; int iCnt3 = 0; fin.read((char*)&iCnt3, sizeof(iCnt3)); printf("icnt3=%d.\n", iCnt3); SVarlength var2; char* pBuff = NULL; int iBuff = 0; for(int ii=0; ii<iCnt3; ii++){fin.read((char*)&var2, sizeof(var2)); printf("id=%d, id2=%d, len=%d: ", var2.id, var2.id2, var2.len); if (var2.len > iBuff){if (iBuff > 0){delete[] pBuff; }pBuff = new char[var2.len + 2];if (pBuff){iBuff = var2.len + 2;}}fin.read(pBuff, var2.len); printf("%s.\n", pBuff); }if (iBuff > 0){iBuff = 0; delete[] pBuff; }return 0; 





1 0
原创粉丝点击