Написание ВСЕГО выхода программы в txt-файл в C++


7

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

sOutFile << stdout; 

где sOutFile является объектом ofstream, который создает файл, как это:

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

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

0x77c5fca0 

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

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

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

  0

Я думаю, что утверждение, что создает файл должен быть «ofstream sOutFile (» CreateAFile.txt ");». Правильно? 22 фев. 092009-02-22 08:01:58

7

Это дубликат: this question

Вы можете перенаправить стандартный вывод, STDERR и использованием стандартного ввода 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

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

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

program > output.txt 

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


15

Если ваша программа уже использует COUT/Printf и вы хотите отправить все, что вы в настоящее время вывода в файл, вы можете просто перенаправить стандартный вывод, чтобы указать на файл перед существующими вызовами: 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(); 

EDIT агрегированных ответы от John T и Брайан Бонди:
Наконец, если вы используете его из командной строки, вы можете просто перенаправить вывод, как и все остальное, упомянутые с помощью оператора перенаправления «>» или добавить «>>»:

myProg > stdout.txt 2> stderr.txt 
  0

appending eh ... похоже, что все делают с моим ответом на их. +1 для ваших усилий. 22 фев. 092009-02-22 08:06:11

  0

Джоэл сказал, что хорошо сделать, это вернуться к вопросу и объединить все хорошие ответы. Это грязная работа, но кто-то должен это сделать. И глупо оставлять ответ неполным, поскольку другие люди предлагают предложения, о которых вы не думаете, поэтому я пытаюсь проголосовать за вас и добавить его в свою. 22 фев. 092009-02-22 08:12:26

  0

Возможно, вы также должны упомянуть перенаправление stderr (с «2> x.txt» или «2> & 1», если я правильно помню.) 23 фев. 092009-02-23 01:53:18

  0

Не собирался получать это конкретное, но я думаю, что это будет полезно для будущих поисков (и давая должное кредит Джону и Брайану). 23 фев. 092009-02-23 16:08:34


3

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


3
sOutFile << stdout; 

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

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