Creating fstream object from a FILE* pointer

后端 未结 2 1018
误落风尘
误落风尘 2020-12-18 18:27

The well known way of creating an fstream object is:

ifstream fobj(\"myfile.txt\");

ie. using a filename.

相关标签:
2条回答
  • 2020-12-18 18:34

    You can create a string, and use fread to read and append to it. It's not clean, but you're working with a C interface.

    Something like this should work:

    FILE * f = popen(...)
    const unsigned N=1024;
    string total;
    while (true) {
        vector<char> buf[N];
        size_t read = fread((void *)&buf[0], 1, N, f);
        if (read) { total.append(buf.begin(), buf.end()); }
        if (read < N) { break; }
    }
    pclose(f);
    
    0 讨论(0)
  • 2020-12-18 18:49

    You cannot do that just in standard C++, since iostreams and C I/O are entirely separate and unrelated. You could however write your own iostream that's backed by a C FILE stream. I believe that GCC comes with one such stream class as a library extension.

    Alternatively, if all you want is an object-y way of wrapping a C FILE stream, you could use a unique pointer for that purpose.

    0 讨论(0)
提交回复
热议问题