Запись ВСЕХ программных выводов в текстовый файл на C ++ - PullRequest
8 голосов
/ 22 февраля 2009

Мне нужно записать все выходные данные моей программы в текстовый файл. Я полагаю, что это сделано так,

sOutFile << stdout;

где sOutFile - объект ofstream, который создает файл следующим образом:

sOutFile("CreateAFile.txt" ); // CreateAFile.txt is created.

Когда я вставляю stdout в объект sOutFile, я получаю некоторый код, который выглядит как восьмеричный [шестнадцатеричный] код или какой-то адрес в текстовом файле, который я создал.

0x77c5fca0

Но что меня смущает, так это то, что в моей программе я несколько раз использую cout. В основном просто буквальное утверждение. Если я не ошибаюсь, это вывод программы.

Если этот код является адресом, будет ли он содержать все мои выходные данные? Могу ли я прочитать это обратно в программу и узнать об этом?

Что я могу сделать, чтобы ВСЕ выходные данные моей программы были записаны в текстовый файл?

Ответы [ 5 ]

15 голосов
/ 22 февраля 2009

Если ваша программа уже использует cout / printf и вы хотите отправить ВСЕ, что вы в данный момент выводите в файл, вы можете просто перенаправить stdout, чтобы он указывал на файл до ваших существующих вызовов: http://support.microsoft.com/kb/58667

Соответствующий код:

freopen( "file.txt", "w", stdout );
cout << "hello file world\n"; // goes to file.txt
freopen("CON", "w", stdout);
printf("Hello again, console\n"); // redirected back to the console

В качестве альтернативы, если вы хотите, чтобы некоторые вещи печатались в файле, вам нужен обычный поток вывода файла: http://www.cplusplus.com/doc/tutorial/files.html

Соответствующий код:

ofstream myfile;
myfile.open("file.txt");
myfile << "Hello file world.\n";
printf("Hello console.\n");
myfile.close();

РЕДАКТИРОВАТЬ, чтобы объединить ответы Джона Т и Брайана Бонди:
Наконец, если вы запускаете его из командной строки, вы можете просто перенаправить вывод, как и все остальные, с помощью оператора перенаправления ">" или добавить ">>":

myProg > stdout.txt 2> stderr.txt
9 голосов
/ 22 февраля 2009

Это дубликат: этот вопрос

Вы можете перенаправить stdout, stderr и stdin, используя std::freopen.

Из приведенной выше ссылки:

/* freopen example: redirecting stdout */
#include <stdio.h>

int main ()
{
  freopen ("myfile.txt","w",stdout);
  printf ("This sentence is redirected to a file.");
  fclose (stdout);
  return 0;
}

Вы также можете запустить вашу программу из командной строки, например:

a.exe > stdout.txt 2> stderr.txt
6 голосов
/ 22 февраля 2009

Если вы хотите, чтобы все выводились в текстовом файле, вам не нужно ничего кодировать.

из командной строки:

program > output.txt

Если вы хотите перенаправить только определенный вывод, вы можете использовать ostream, как указано в отчете.

3 голосов
/ 22 февраля 2009
sOutFile << stdout;

в C "stdout" определяется как переменная FILE*. Это просто указатель. Вывод его в файл просто записывает значение указателя, в вашем случае: 0x77c5fca0 в файл.

Если вы хотите перенаправить вывод в файл, сначала запишите его в файл или перенаправьте вывод вашей программы в файл с помощью командной строки.

3 голосов
/ 22 февраля 2009

Тогда вы не можете использовать std :: cout где-либо еще, чтобы распечатать материал из вашей программы. Измените std :: cout на std :: ostream, а затем передайте свой файл или std :: cout, как требуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...