题目描述
C++实现多个map结构内容序列化写入文件
代码
```javascript
#include <map>
#include <string.h>
#include <iostream>
#include <stdio.h>
#include <fstream>
#include <istream>
#include <unistd.h>
#include <cstdlib>
int WriteFile(std::string fname, std::map<std::string, std::string> *m)
{
int count = 0;
if (m->empty())
return 0;
FILE *fp = fopen(fname.c_str(), "w");
if (!fp)
return -errno;
for (std::map<std::string, std::string>::iterator it = m->begin(); it != m->end(); it++)
{
fprintf(fp, "%s=%s\n", it->first.c_str(), it->second.c_str());
count++;
}
fclose(fp);
return count;
}
int ReadFile(std::string fname, std::map<std::string, std::string> *m)
{
int count = 0;
if (access(fname.c_str(), R_OK) < 0)
return -errno;
FILE *fp = fopen(fname.c_str(), "r");
if (!fp)
return -errno;
m->clear();
char *buf = 0;
size_t buflen = 0;
while (getline(&buf, &buflen, fp) > 0)
{
char *nl = strchr(buf, '\n');
if (nl == NULL)
continue;
*nl = 0;
char *sep = strchr(buf, '=');
if (sep == NULL)
continue;
*sep = 0;
sep++;
std::string s1 = buf;
std::string s2 = sep;
(*m)[s1] = s2;
count++;
}
if (buf)
free(buf);
fclose(fp);
return count;
}
int main()
{
std::string filename = "1.txt";
std::map<std::string, std::string> map1;
std::map<std::string, std::string> map2;
map1.insert(std::pair<std::string, std::string>("A", "20"));
map1.insert(std::pair<std::string, std::string>("B", "22"));
map1.insert(std::pair<std::string, std::string>("C", "21"));
WriteFile(filename, &map1)
ReadFile(filename, &map2);
for (auto it = map2.begin(); it != map2.end(); ++it)
{
cout << "key:" << it->first << " value:" << it->second << endl;
}
return 0;
}