2010-07-17 3 views
5

J'essaie d'écrire les données de la console dans un fichier texte séparé dans cpp. Quelqu'un m'aider avec un exemple de code.Comment écrire la sortie de la console dans un fichier texte dans cpp?

+1

les données de la console de ce processus? votre propre processus? un autre processus que vous créez? – shoosh

+0

Qu'est-ce que "les données de la console"? Comment ressemble votre approche actuelle? – Philipp

+2

Toute personne recherchant une réponse recherche la réponse de user11977. C'est le bon. –

Répondre

18

Il existe plusieurs façons de procéder. Vous pouvez le rediriger depuis la ligne de commande avec programname > out.txt. Ou vous pouvez utiliser freopen("out.txt","w",stdout); au début de votre programme.

+0

Cela fonctionnait bien pour moi. Mais soudain, les sorties de la console cmd étaient complètement invisibles. Lorsque je supprime cette ligne, les sorties cmd étaient visibles retour –

0

Si vous voulez créer un processus enfant et rediriger sa sortie, vous pouvez faire quelque chose comme ceci:

FILE* filePtr = popen("mycmd"); 
FILE* outputPtr = fopen("myfile.txt"); 

if(filePtr && outputPtr) { 
    char tmp; 
    while((tmp = getc(filePtr)) != EOF) 
     putc(tmp, outputPtr); 

    pclose(filePtr); 
    fclose(outputPtr); 
} 
+0

uniquement pertinent avec pthreads ... – shoosh

1

Si vous voulez écrire à partir de votre propre processus, je vous suggère une méthode simple d'impression

void print(const string str, ostream & output) 
{ 
    output << str; 
} 

Ensuite, vous pouvez appeler

print("Print this", cout); 

pour la sortie de la console, ou

ofstream filestream("filename.out"); 
print("Print this", filestream); 

d'écrire dans un fichier "filename.out". Bien sûr, vous gagnez le plus, si print est une méthode de classe qui affiche toutes les informations spécifiques à l'objet dont vous avez besoin et vous pouvez ainsi diriger facilement la sortie vers différents flux.

+2

La fonction 'print' que vous avez définie n'a presque aucun avantage. Vous pouvez tout aussi bien écrire 'cout <<" Imprimer ceci ";' pour votre premier exemple et 'filestream <<" Imprimer ceci ";" dans le deuxième exemple, sauf 'print' ajouter une logique supplémentaire (peut-être écrire un horodatage ou peut-être en écrivant à la sortie standard et un fichier), il n'y a aucun avantage à une telle fonction. –

0

bbtrb a écrit:

void print (string const str, ostream & sortie) { sortie < < str; }

Mieux que cela est bien sûr

ostream& output(ostream& out, string str) {out << str; return out;} 

de sorte que vous pouvez même avoir le flux de sortie manipulé retourné par la fonction.

0

smerrimans réponse devrait vous aider.

Il est également possible d'implémenter votre propre streambuf et de l'utiliser avec std :: cout et std :: cerr pour stocker les impressions dans un fichier au lieu d'imprimer sur la console. Je l'ai fait il y a un certain temps pour rediriger les impressions vers des journaux rotatifs avec horodatage.

Vous aurez besoin de lire un peu sur la façon dont cela fonctionne et this book m'a aidé à bien faire les choses.

Si ce n'est pas ce que vous recherchez, c'est un peu exagéré.

Questions connexes