29

fstreamオブジェクトを作成するよく知られた方法は次のとおりです。

ifstream fobj("myfile.txt");

すなわち。ファイル名を使用します。

しかし、ファイル記述子を使用して ifstream オブジェクトを作成したいと考えています。

理由:を使用してコマンドを実行したい_popen() _popen()出力を として返しますFILE*。そのため、FILE* ポインターが含まれていますが、ファイル名はありません。

4

2 に答える 2

5

iostream と CI/O は完全に分離されており、関連がないため、標準の C++ だけでこれを行うことはできません。ただし、C FILE ストリームに基づく独自のiostream を作成することはできます。GCC には、ライブラリ拡張などのストリーム クラスが付属していると思います。

あるいは、C FILE ストリームをラップするオブジェクトのような方法だけが必要な場合は、その目的のために一意のポインターを使用できます。

于 2012-05-19T17:51:44.653 に答える
-3

文字列を作成し、 fread を使用して読み取りと追加を行うことができます。きれいではありませんが、C インターフェイスを使用しています。

このようなものが動作するはずです:

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);
于 2014-10-10T14:35:26.790 に答える