2010-07-17 6 views
5

Я пытаюсь записать данные консоли в отдельный текстовый файл в cpp. Кто-нибудь поможет мне с образцом кода.Как написать вывод консоли в текстовый файл в cpp?

+1

данные консоли какого процесса? ваш собственный процесс? какой-нибудь другой процесс, который вы создаете? – shoosh

+0

Что такое «данные консоли»? Как выглядит ваш текущий подход? – Philipp

+2

Любой, кто ищет ответ, ищет ответ user11977. Это правильный. –

ответ

18

Существуют различные способы сделать это. Вы можете перенаправить его из командной строки с programname > out.txt. Или вы можете использовать freopen("out.txt","w",stdout); в начале вашей программы.

+0

Это работало хорошо для меня. Но внезапно выходы консоли CMD были полностью невидимы. Когда я удаляю эту строку, выходы cmd были видны назад –

0

Если вы хотите создать дочерний процесс и перенаправить его вывод, который вы могли бы сделать что-то вроде этого:

FILE* filePtr = popen("mycmd"); 
FILE* outputPtr = fopen("myfile.txt"); 

if(filePtr && outputPtr) { 
    char tmp; 
    while((tmp = getc(filePtr)) != EOF) 
     putc(tmp, outputPtr); 

    pclose(filePtr); 
    fclose(outputPtr); 
} 
+0

, относящихся только к pthreads ... – shoosh

1

Если вы хотите написать от вашего собственного процесса, я хотел бы предложить простой метод печати

void print(const string str, ostream & output) 
{ 
    output << str; 
} 

Тогда вы можете позвонить

print("Print this", cout); 

для консольного вывода, или

ofstream filestream("filename.out"); 
print("Print this", filestream); 

написать в файл "filename.out". Конечно, вы получаете больше всего, если print - это метод класса, который выводит всю необходимую вам информацию о конкретном объекте, и таким образом вы можете легко выводить результат на разные потоки.

+2

Функция 'print', которую вы определили, практически не имеет преимущества. Вы можете так же легко написать 'cout <<" Распечатать это ";' для первого примера и 'filestream <<" Распечатать это ";" во втором примере. Если 'print' добавить дополнительную логику (возможно, написание метки времени или возможно, запись на стандартный вывод и файл), нет никакой пользы для такой функции. –

0

bbtrb писал:

недействительной печати (Const строки, ул ostream & выхода) { выхода < < ул; }

Лучше, чем это, конечно

ostream& output(ostream& out, string str) {out << str; return out;} 

так, что вы даже можете иметь манипулировали выходной поток, возвращаемый функцией.

0

ответ smerrimans должен помочь вам.

Существует также возможность реализовать свой собственный streambuf и использовать его с std :: cout и std :: cerr для хранения распечаток в файл вместо печати на консоль. Я сделал это некоторое время назад, чтобы перенаправить распечатки на какие-то вращающиеся журналы с отметками времени.

Вам нужно будет немного почитать о том, как это работает, и this book помог мне разобраться.

Если это не то, что вы после этого немного переборщило.

Смежные вопросы