Запись всех выходных данных программы в txt-файл на C++

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

sOutFile << stdout;

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

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

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

0x77c5fca0

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

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

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

5 ответов


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

вы можете перенаправить 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

Если ваша программа уже использует 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

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

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

program > output.txt

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


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


sOutFile << stdout;

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

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