Ecriture de TOUTES les sorties du programme dans un fichier txt en C++


7

J'ai besoin d'écrire toute ma sortie de programme dans un fichier texte. Je crois qu'il est fait de cette façon,

sOutFile << stdout; 

où sOutFile est l'objet ofstream qui crée le fichier comme ceci:

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

Lorsque j'insère le stdout dans l'objet sOutFile, je reçois un code qui semble pour ressembler octal code [hexadécimal] ou une adresse de quelque sorte dans le fichier texte que j'ai créé.

0x77c5fca0 

Mais ce qui me déroute, c'est que dans mon programme j'utilise cout plusieurs fois. La plupart du temps juste une déclaration littérale. Si je ne me trompe pas, c'est la sortie du programme.

Si ce code est une adresse, est-ce qu'il contiendrait toutes mes sorties? Pourrais-je le relire au programme et le découvrir de cette façon?

Que puis-je faire pour que TOUTES les sorties de mon programme soient écrites dans un fichier texte?

  0

Je pense que la déclaration qui crée le fichier doit être « ofstream sOutFile (» CreateAFile.txt "); '. Droite? 22 févr.. 092009-02-22 08:01:58

7

C'est un double de: this question

Vous pouvez rediriger stdout, stderr et stdin en utilisant std::freopen.

À partir du lien ci-dessus:

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

Vous pouvez également exécuter votre programme via l'invite de commande comme ceci:

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

6

Si vous voulez que toutes les sorties soient dans un fichier texte, vous n'avez pas besoin de coder quoi que ce soit de plus.

de la ligne de commande:

program > output.txt 

Si vous ne souhaitez rediriger certains sortie, vous pouvez utiliser ostream comme suggéré dirkgently.


15

Si votre programme utilise déjà Cout/printf et que vous voulez envoyer TOUT ce que vous en sortie vers un fichier, vous pouvez simplement rediriger stdout pour pointer vers un fichier avant vos appels existants: http://support.microsoft.com/kb/58667

code pertinent:

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 

Alternativement, si vous voulez juste des choses à imprimer dans un fichier, vous voulez juste un flux régulier de sortie du fichier: http://www.cplusplus.com/doc/tutorial/files.html

pertinentes du code:

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

EDIT pour des réponses globales de John T et Brian Bondy:
Enfin, si vous l'exécuter à partir du commandline, vous pouvez simplement rediriger la sortie comme tous les autres mentionnés en utilisant l'opérateur de redirection « > » ou ajoutez ">>":

myProg > stdout.txt 2> stderr.txt 
  0

en ajoutant hein ... semble être ce que tout le monde fait avec ma réponse à la leur. +1 pour vos efforts cependant. 22 févr.. 092009-02-22 08:06:11

  0

Joel a dit qu'une bonne chose à faire est de revenir à une question et de combiner toutes les bonnes réponses ... c'est un sale boulot, mais quelqu'un doit le faire. Et c'est stupide de laisser une réponse incomplète car d'autres personnes fournissent des suggestions auxquelles vous ne pensez pas, alors j'essaie de vous voter et de l'ajouter au mien aussi. 22 févr.. 092009-02-22 08:12:26

  0

Vous devriez probablement également mentionner la redirection stderr (avec "2> x.txt" ou "2> & 1" si je me souviens bien.) 23 févr.. 092009-02-23 01:53:18

  0

Cela ne va pas être aussi précis, mais je pense que ça vaut la peine d'agréger pour de futures recherches (et donner un crédit approprié à John et Brian). 23 févr.. 092009-02-23 16:08:34


3

Ensuite, vous ne pouvez pas utiliser std :: cout ailleurs pour imprimer des éléments de votre programme. Changez std :: cout en un std :: ostream et passez votre fichier ou std :: cout si nécessaire.


3
sOutFile << stdout; 

en C "stdout" est définie comme une variable FILE*. C'est juste un pointeur. La sortie dans un fichier écrit simplement la valeur du pointeur, dans votre cas: 0x77c5fca0 dans le fichier.

Si vous souhaitez diriger votre sortie vers un fichier, écrivez-le en premier lieu ou redirigez la sortie de votre programme vers un fichier en utilisant la ligne de commande.