从文件中获取偏移量和大小以存储在地图中

时间:2015-03-14 13:58:18

标签: c++ json

我有一个名为short2.json的JSON文件,它以下列格式存储树:

{"id":442500001101774848, "reply":0, "children":[{"id":442501072373153792, "reply":1, "children":[{"id":442501562938966016, "reply":1, "children":[{"id":442502567265062912, "reply":1, "children":[]}]}]}]}
{"id":442500000258342912, "reply":0, "children":[{"id":442500636668489728, "reply":0, "children":[]}]}

我需要将每个树的根存储在一个散列图中,同时将一个元组存储为与树对应的行的偏移​​量和字节大小,这样我最终可以进行一些搜索并从该行中的确切位置复制该行。文件到另一个文件。为此,我将需要文件中每一行的偏移量和行的大小(或者有更好的方法吗?)

我做了以下事情:

#include <iostream>
#include <fstream>
using namespace std;
int main() {
        ifstream files("short2.json");
        string f;
        while (getline(files, f)) {
                fpos_t pos;
                fgetpos(files, &pos);
                cout << *pos << " " << sizeof(f) << endl;
        }
}

但是在编译时,我收到以下错误:

readFile.cpp: In function âint main()â:
readFile.cpp:9:22: error: invalid conversion from âvoid*â to âFILE* {aka _IO_FILE*}â [-fpermissive]
/usr/include/stdio.h:795:12: error:   initializing argument 1 of âint fgetpos(FILE*, fpos_t*)â [-fpermissive]
readFile.cpp:10:12: error: no match for âoperator*â in â*posâ

如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

感谢@LightnessRacesinOrbit指针。以下是我提出的代码。

#include <iostream>
#include <fstream>
using namespace std;
int main() {
        ifstream files("short2.json");
        string f;
        while (getline(files, f)) {
                cout << files.tellg() - f.size() - 1 << " " << f.size() << endl;
        }
}