2

次のようなコードがあるとします

#include <iostream>
using namespace std;

int main() {
    cout << "Redirect to file1" << endl;
    cout << "Redirect to file2" << endl;
    return 0;
}

最初の出力を file1 にリダイレクトし、2 番目の出力を file2 にリダイレクトしたいと考えています。それは可能ですか?

私はCで考え、fclose(stdout)再度開くとstdout役立つかもしれませんが、開く方法や機能するかどうかはわかりません。

ありがとう

更新: 何のために?

ユーザーからの入力を読み取り、対応する出力を生成するプログラムAがあります。今、それが正しいかどうかを確認したいのですが、A の入力と正しい出力を生成するプログラム B があります。B は一度に 1 セットのテスト データを生成します。そして、私は何千ものテストを受けます。

私のマシンでは、 を使用するよりも 1000 倍./B > ``mktemp a.XXX``うまく機能しofstreamます。何千回も使用fstreamすると、ハードドライブのライトが狂ったように点滅します。ただし、一時ファイルにリダイレクトする場合はそうではありません。

更新 2:

C++ では、一般的な答えcoutcerr.

C は別としてstderr、閉じstdoutて再度開くことはできますか?

4

5 に答える 5

3

Why not use file streams ? this way it will most likely work regardless of the shell redirection:

#include <fstream>
#include <fstream>
using namespace std;
// opeen files
ofstream file1 ( "file1");
ofstream file2 ( "file2");
//write
file1 << "Redirect to file1" << endl;
file2 << "Redirect to file2" << endl;
//close files
file1.close();
file2.close();
于 2012-11-12T13:23:45.817 に答える
2

cout AND cerr を使用できます。

cout << "Redirect to file1" << endl;
cerr << "Redirect to file2" << endl;

cerr は標準エラーに移行します

于 2012-11-12T13:24:31.547 に答える
1

You can always use the standard error stream for e.g. error messages.

#include <iostream>
using namespace std;

int main() {
    cout << "Redirect to file1" << endl;
    cerr << "Redirect to file2" << endl;
}

For example, using the Windows [cmd.exe] command interpreter, and the Visual C++ cl compiler:

[D:\dev\test]
> type con >streams.cpp
#include <iostream>
using namespace std;

int main() {
    cout << "Redirect to file1" << endl;
    cerr << "Redirect to file2" << endl;
}
^Z

[D:\dev\test]
> cl streams.cpp
streams.cpp

[D:\dev\test]
> streams 1>a.txt 2>b.txt

[D:\dev\test]
> type a.txt
Redirect to file1

[D:\dev\test]
> type b.txt
Redirect to file2

[D:\dev\test]
> _


EDIT: added colorized code and boldface emphasis.

于 2012-11-12T13:23:55.113 に答える
1

それを行う別の方法は、cout.rdbuf()次のように使用することです。

#include <iostream>
#include <fstream>
using namespace std;

int main () {
    ofstream cfile1("test1.txt");
    ofstream cfile2("test2.txt");

    cout.rdbuf(cfile1.rdbuf());        
    cout << "Redirect to file1" << endl;

    cout.rdbuf(cfile2.rdbuf());        
    cout << "Redirect to file2" << endl; 

    return 0;
}
于 2012-11-12T13:28:13.280 に答える
1

コード:

#include <iostream>
using namespace std;

int main() {
    cout << "Redirect to file1" << endl;
    cerr << "Redirect to file2" << endl;
    return 0;
}

コンソール:

test > 1.txt 2> 2.txt

1.txt:

Redirect to file1

2.txt:

Redirect to file2
于 2012-11-12T13:30:22.707 に答える