Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
895 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Question C++ facile pour les experts

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Question C++ facile pour les experts

n°133340
solvene
Posté le 02-05-2002 à 11:45:37  profilanswer
 

Soit le program suivant:
 
main ()
{
 cout << "je souhaite ecrire dans un fichier" << endl;
}
 
Quelles sont les quelques lignes de code qui me permettraient  d'ecrire dans un fichier "myfic" par exemple plutot que dans le stdout?
ps: sans enlever le cout ...
 
merci

mood
Publicité
Posté le 02-05-2002 à 11:45:37  profilanswer
 

n°133349
solvene
Posté le 02-05-2002 à 11:54:38  profilanswer
 

La commande "system" serait une solution :  
system(nomDeLExecutable > fichier)  
 
Mais je souhaiterais le faire a partir du code...
Il doit y avoir un lien entre les fstream et les ostream, du fait de l'heritage..

n°133354
El_gringo
Posté le 02-05-2002 à 12:01:07  profilanswer
 

C'est facile pour les experts.
C'est facile aussi pour ceux qui veulent bien bouger un peu leurs fesses, et chercher dans une doc...
Si t'utilises les MFC, cherche du coté de CFile
Sinon, comme en C simple, utilises fopen et compagnie.

n°133356
antp
Super Administrateur
Champion des excuses bidons
Posté le 02-05-2002 à 12:02:20  profilanswer
 

fstream *f;
f = new fstream;
f->open("c:\\fichier.txt", ...);
f << "ligne de texte " << endl;
f->close();
delete f;
 
J'imagine que c'est un truc dans ce genre. Je n'ai utilisé ça qu'une fois, et je n'ai plus le code-source :(
 
 
edit: j'avais pas vu "sans enlever le cout"... je vois pas trop ce que ça a à voir :heink:

 

[jfdsdjhfuetppo]--Message édité par antp le 02-05-2002 à 12:03:31--[/jfdsdjhfuetppo]


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°133357
solvene
Posté le 02-05-2002 à 12:04:14  profilanswer
 

Non, je n'utilise pas les MFC. :(
 
Je connais un moyen en utilisant popen, mais n'y a-t-il pas un autre moyen ?????  :bounce:

n°133361
El_gringo
Posté le 02-05-2002 à 12:06:03  profilanswer
 

solvene a écrit a écrit :

Non, je n'utilise pas les MFC. :(
 
Je connais un moyen en utilisant popen, mais n'y a-t-il pas un autre moyen ?????  :bounce:  




 
popen !? connais pas !
antp viens de te donner autre chose...

n°133369
solvene
Posté le 02-05-2002 à 12:09:35  profilanswer
 

antp a écrit a écrit :

fstream *f;
f = new fstream;
f->open("c:\\fichier.txt", ...);
f << "ligne de texte " << endl;
f->close();
delete f;




 
Oui, merci, ca je connais bien sur, mais je ne veux garder le cout... :??:

n°133416
kenshiro18​2
Posté le 02-05-2002 à 14:02:07  profilanswer
 

solvene a écrit a écrit :

Soit le program suivant:
 
main ()
{
 cout << "je souhaite ecrire dans un fichier" << endl;
}
 
Quelles sont les quelques lignes de code qui me permettraient  d'ecrire dans un fichier "myfic" par exemple plutot que dans le stdout?
ps: sans enlever le cout ...
 
merci  




 
"cout" est la sortie standard. Tu peux pas ecrire dans un fichier en utilisant "cout". C'est comme si tu dis "je veux passer par la fenetre pas par la porte, mais je veux quand meme utiliser la porte".
 
Sinon, tu peux rediriger la sortie standard vers un fichier de deux manieres:
- soit tu utilises les fonctions "dup" ou "dup2"
- soit tu lances ton .exe comme ca: mon_prog.exe > out.txt
C'est peut-etre pas ca que tu veux
 
antp: ton "new" sert a rien, a part perdre du temps a l'execution. Vaut mieux creer les objets sur la pile.

n°133427
antp
Super Administrateur
Champion des excuses bidons
Posté le 02-05-2002 à 14:20:54  profilanswer
 

Ouais j'ai tendance à faire à cause de C++Builder :/
Une bonne partie des objets de la VCL ne peuvent être crée que via un new.

 

[jfdsdjhfuetppo]--Message édité par antp le 02-05-2002 à 14:21:27--[/jfdsdjhfuetppo]


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°133679
fabsk
Posté le 02-05-2002 à 19:13:03  profilanswer
 

antp a écrit a écrit :

Ouais j'ai tendance à faire à cause de C++Builder :/
Une bonne partie des objets de la VCL ne peuvent être crée que via un new.  




 
Je savais pas, je connais pas la VCL (eh oui, je suis un suppot de Microsoft, je suis meme certifie pour les MFC, cette grosse dauble,  c'est pour dire).
Comment ca se fait pour la VCL, tu veux dire que cette lib detruit automatiquement certains objets (genre les controles, c'est le cas dans la lib wxWindows) ?
 
Si non, jette un coup d'oeil a www.boost.org , il y a des smarts pointers sympas. Exemple:
 
#include <boost/smart_ptr.hpp>
 
{
 boost::scoped_ptr<Voiture> pvoiture(new Voiture);
}
 
Et hop quand il sort du bloc, il detruit automatiquement ton objet (ce qui est bien car si tu mets un "return" ou une exception au milieu, t'es garanti que l'objet sera detruit).
J'en use et j'en abuse de cette lib.

mood
Publicité
Posté le 02-05-2002 à 19:13:03  profilanswer
 

n°133717
antp
Super Administrateur
Champion des excuses bidons
Posté le 02-05-2002 à 20:12:18  profilanswer
 

les VCL ce sont des librairies en Pascal à l'origine (Delphi) donc il y a certaines contraintes apparemment. En Pascal tu ne peux pas créer un objet directement :
obj1: TObjet; // équivaut à TObjet *obj1;
obj1 := TObjet.Create; // équivaut à obj1 = new TObjet;
obj1.Free; // équivaut à if(obj1 != NULL) delete obj1;
Je suppose que c'est à cause de ça qu'on est obligé d'utiliser le "new".
Par contre tous les objets visuels (d'une fenêtre, les boutons etc...) sont détruits automatiquement par la fenêtre, donc on fait des new mais jamais de delete.
 
Sinon pour l'histoire des pointeurs détruits lors des return, y a un truc sympa en Pascal que Borland a rajouté au C++ : try/finally.
 
obj1 := TObjet.Create;
try
 (plein de trucs)
finally
  obj1.Free;
end;
 
En théorie peu importe ce qui se passe entre le try et le finally le programme passera toujours par finally, que ce soit une exception ou un Exit (return du C).
En C++Builder c'est devenu
try
{
}
__finally
{
}

 

[jfdsdjhfuetppo]--Message édité par antp le 02-05-2002 à 20:16:27--[/jfdsdjhfuetppo]


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°133734
fabsk
Posté le 02-05-2002 à 20:54:08  profilanswer
 

Merci pour les precisions sur la VCL. Comme dirait mon futur-ex-petit chef: "je le mettrai sur mon CV" :-)
 
[citation]
obj1.Free; // équivaut à if(obj1 != NULL) delete obj1;
[/citation]
Note que ce n'est pas la peine de teste si l'objet est NULL. "delete 0" ne fait rien (selon notre ami a tous Bjarne Stroustrup). Par contre:
dekete obj1; obj1 = 0;
 
[citation]
Sinon pour l'histoire des pointeurs détruits lors des return, y a un truc sympa en Pascal que Borland a rajouté au C++ : try/finally.
[/citation]
Ca existe en Java et c'est bien. Par contre, j'aime pas trop les extensions proprio aux langages de programmation, rien que parce qu'on peut s'y habituer !

n°133746
antp
Super Administrateur
Champion des excuses bidons
Posté le 02-05-2002 à 21:05:52  profilanswer
 

delete NULL ne plante pas ?  
Ha bhen j'aurais appris un truc :D
 
En Pascal il y a obj.Destroy qui plante si c'est nil (NULL), et obj.Free qui fait le test avant.
Y a aussi FreeAndNil(Obj) qui met à nil après avoir fait le Free...


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Question C++ facile pour les experts

 

Sujets relatifs
[PHP] Question de Newbie :-) : A HREF qui fait pas ce que je veux !Question java
Question mySQL ...question Visual C++
[PHP] Petite question[javascript (facile)] fermer une fenêtre ...
[PHP]deux question de debutant[C] Question gestion du temps
[PHP] Script facile , mais je debute , Aidez-moi !sql/oracle : juste une question
Plus de sujets relatifs à : Question C++ facile pour les experts


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR