8 Stimmen

Schreiben ALLER Programmausgaben in eine txt-Datei in C++

Ich muss alle Ausgaben meines Programms in eine Textdatei schreiben. Ich glaube, das geht auf diese Weise,

sOutFile << stdout;

wobei sOutFile das ofstream-Objekt ist, das die Datei wie folgt erstellt:

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

Wenn ich stdout in das sOutFile-Objekt einfüge, erhalte ich einen Code, der ähnlich aussieht wie oktal [hexadezimaler] Code oder eine beliebige Adresse in der von mir erstellten Textdatei.

0x77c5fca0

Was mich aber verwirrt, ist, dass ich in meinem Programm mehrmals cout verwende. Meistens nur als wörtliche Anweisung. Wenn ich mich nicht irre, ist das die Programmausgabe.

Wenn dieser Code eine Adresse ist, würde er dann alle meine Ausgaben enthalten? Könnte ich sie in das Programm zurücklesen und auf diese Weise herausfinden?

Was kann ich tun, damit ALLE meine Programmausgaben in eine Textdatei geschrieben werden?

16voto

Andrew Coleson Punkte 9802

Wenn Ihr Programm bereits cout/printf verwendet und Sie ALLES, was Sie derzeit ausgeben, an eine Datei senden möchten, können Sie stdout einfach umleiten, so dass es vor Ihren bestehenden Aufrufen auf eine Datei zeigt: http://support.microsoft.com/kb/58667

Relevanter Code:

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

Wenn Sie nur einige Dinge in eine Datei ausgeben wollen, können Sie auch einen normalen Dateiausgabestrom verwenden: http://www.cplusplus.com/doc/tutorial/files.html

Relevanter Code:

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

EDIT zum Zusammenfassen der Antworten von John T und Brian Bondy:
Schließlich, wenn Sie es von der Kommandozeile aus ausführen, können Sie einfach die Ausgabe umleiten, wie alle anderen erwähnt haben, indem Sie den Umleitungsoperator ">" verwenden oder ">>" anhängen:

myProg > stdout.txt 2> stderr.txt

9voto

Brian R. Bondy Punkte 325712

Dies ist ein Duplikat von: diese Frage

Sie können stdout, stderr und stdin umleiten, indem Sie std::freopen .

Aus dem obigen Link:

/* 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;
}

Sie können Ihr Programm auch über die Eingabeaufforderung wie folgt ausführen:

a.exe > stdout.txt 2> stderr.txt

6voto

John T Punkte 23177

Wenn Sie die gesamte Ausgabe in einer Textdatei wünschen, brauchen Sie nichts extra zu programmieren.

über die Befehlszeile:

program > output.txt

Wenn Sie nur bestimmte Ausgaben umleiten möchten, können Sie ostream verwenden, wie von dirkgently vorgeschlagen.

3voto

dirkgently Punkte 104289

Dann können Sie std::cout nirgendwo anders verwenden, um Dinge aus Ihrem Programm zu drucken. Ändern Sie std::cout in einen std::ostream und übergeben Sie dann Ihre Datei oder std::cout wie erforderlich.

3voto

shoosh Punkte 73374
sOutFile << stdout;

in C " stdout " ist definiert als ein FILE* variabel. Es ist nur ein Zeiger. Die Ausgabe in eine Datei schreibt in Ihrem Fall nur den Wert des Zeigers: 0x77c5fca0 zur Datei.

Wenn Sie Ihre Ausgabe in eine Datei leiten wollen, schreiben Sie sie entweder von vornherein in eine Datei oder leiten Sie die Ausgabe Ihres Programms über die Befehlszeile in eine Datei um.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X