begin process at 2012 05 29 10:53:05
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Général

 > 

efstream, impossibilité d'écrire dans un fichier .txt


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

efstream, impossibilité d'écrire dans un fichier .txt

lundi 20 juin 2011 à 18:31:34 | efstream, impossibilité d'écrire dans un fichier .txt

LaGrandeBete06


Bonjour à tous,

Je viens de me mettre au C++ et je dois créer et ouvrir un fichier .txt avec une methode, puis j'appelle une autre methode pour écrire dans ce fichier des résultats. Le fichier se créé bien mais je n'arrive pas à écrire dedans, en effet une fois terminé je l'ouvre manuellement et il est vide (taille O ko).
Pourriez vous me filer un coup de main, je galère un peu....
Voici ma première methode:

void PricingWaveKernel::Write_txt::InitializeSim(unsigned long simulationKey, unsigned long MCIterations)
{
char simulationKeyChar[sizeof(unsigned long)];
sprintf(simulationKeyChar,"%d",simulationKey);
char fileName[10000];
strcpy(fileName,this->GetParameters()->cparptr[0]);
strcat(fileName,simulationKeyChar);
strcat(fileName,".txt");
ofstream outfile;
outfile.open(fileName,ios::out);

}

et la seconde

void PricingWaveKernel::Write_txt::SimulateSim(unsigned long simulationKey, unsigned long MCIterations, unsigned long time)
{

if(outfile.bad()) // si l'ouverture a réussi
{
double a = *this->parameters->inptr[0];
std::string s;
std::ostringstream oss;
oss << a;
s = oss.str();
outfile<<s;

}

}

J'ai voulu tous mettre sous la forme de string dans la seconde.... le a affiche bien mon input. et les methodes sont bien appelée les unes à la suite des autres et tout compile bien... J'ai pas mal chercher sur le net, le truc c'est que j'ouvre et j'écris avec deux mathodes différentes donc je pense que ca vient de ça.

Je vous remercie pour votre aide.

LaGrandeBete
lundi 20 juin 2011 à 20:50:58 | Re : efstream, impossibilité d'écrire dans un fichier .txt

CptPingu

Administrateur CodeS-SourceS


void PricingWaveKernel::Write_txt::InitializeSim(unsigned long simulationKey, unsigned long MCIterations)
{
char simulationKeyChar[sizeof(unsigned long)];
sprintf(simulationKeyChar,"%d",simulationKey);
char fileName[10000];
strcpy(fileName,this->GetParameters()->cparptr[0]);
strcat(fileName,simulationKeyChar);
strcat(fileName,".txt");
ofstream outfile;
outfile.open(fileName,ios::out);
// outfile << simulationKeyChar; ???
}



Tu ouvres bien le fichier, mais tu n'écris pas dedans, non ?

Quelques remarques:
- Évite les "using namespace", voir: [ Lien ]
- Ne mélange pas C et C++. Si tu fais du C++, essaie de t'y tenir au maximum.

J'aurais écrit ta fonction comme ceci:

Code C/C++ :
void PricingWaveKernel::Write_txt::InitializeSim(unsigned long simulationKey, unsigned long MCIterations)
{
  std::ostringstream buff;
  buff << this->GetParameters()->cparptr[0] << simulationKey << ".txt";
  std::ofstream outfile(buff.str().c_str());
  if (!outfile)
  {
    // Erreur d'ouverture du fichier
    return;
  }
  outfile << // Valeur ?
  // outfile << MCIterations; ?
  outfile.close(); // Facultatif, un ofstream se ferme automatiquement à la fin d'un scope :)
}



________________________________________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
Merci d'utiliser Réponse acceptée si un post répond à votre question
lundi 20 juin 2011 à 21:47:07 | Re : efstream, impossibilité d'écrire dans un fichier .txt

LaGrandeBete06


Merci beaucoup pour ton aide, j'avoue que je debute un peu...
Je voudrai juste savoir si il est possible d'ecrire dans le fichier avec une autre procedure que j'appelle de facon iterative en fonction du nombre de resultats que j'ai calculé du type:


void PricingWaveKernel::Write_txt::SimulateSim(unsigned long simulationKey, unsigned long MCIterations, unsigned long time)
outfile.open();
if (!outfile)
{
// Erreur d'ouverture du fichier
return;
}
// outfile << Valeur
outfile.close(); //
}
Je me doute que je vais avoir un problème pour écrire a la suite dans le fichier texte sans effacer ce qu'il y a avant. mais je ne sais pas trop comment gérer ca.

Je ne peux tester que demain le programme mais en tous cas merci encore pour ton temps.

LaGrandeBete
lundi 20 juin 2011 à 21:58:10 | Re : efstream, impossibilité d'écrire dans un fichier .txt

CptPingu

Administrateur CodeS-SourceS

Je me doute que je vais avoir un problème pour écrire a la suite dans le fichier texte sans effacer ce qu'il y a avant


Non aucun problème.
outfile << "toto";
suivi de:
outfile << "tutu";
Mettra bien "tototutu" dans le fichier.

Je voudrai juste savoir si il est possible d'ecrire dans le fichier avec une autre procedure que j'appelle de facon iterative en fonction du nombre de resultats que j'ai calculé du type:


Je n'ai pas encore compris le but de la man½uvre, mais c'est techniquement tout à fait possible (et pas difficile).

________________________________________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
Merci d'utiliser Réponse acceptée si un post répond à votre question
mardi 21 juin 2011 à 16:35:21 | Re : efstream, impossibilité d'écrire dans un fichier .txt

LaGrandeBete06

Merci encore pour ta reponse,
La première partie de ton code marche très bien mais ensuite lorsque j'appelle ma methode de façon itérative pour écrire dans le fichier une fois créé, je n'arrive toujours pas à écrire dans le fichier.
le test if (outfile!) me revoie toujours à l'exception comme quoi mon fichier n'est pas ouvert. Je ne comprends pas pourquoi la methode open() ne marche pas.

Voici la méthode que j'utilise:

void PricingWaveKernel::Write_txt::SimulateSim(unsigned long simulationKey, unsigned long MCIterations, unsigned long time)
{
double a = *this->parameters->inptr[0];
std::string s;
std::ostringstream oss;
oss << a;
s = oss.str();

outfile.open(buff.str().c_str(),ios_base::out );


if (!outfile)// Ca bloque ici à chaque fois!!!!!!
{
// Erreur d'ouverture du fichier
return;
}
outfile << s << endl;

}

Merci de ton aide.
LaGrandeBete
mardi 21 juin 2011 à 16:43:24 | Re : efstream, impossibilité d'écrire dans un fichier .txt

CptPingu

Administrateur CodeS-SourceS

outfile.open(buff.str().c_str(),ios_base::out );


1) Pas besoin de faire un open. Le constructeur de ofstream fait déjà un open.
2) Pas besoin de std::ios_base::out, un ofstream c'est un fstream + std::ios_base::out

Je ne comprends pas pourquoi la methode open() ne marche pas.


Il ne trouve pas ton fichier, tout simplement. Vérifie le dossier d'exécution ou indique un chemin absolu.


std::string s;
std::ostringstream oss;
oss << a;
s = oss.str();
outfile << s << endl;


Y a un souci là. Pourquoi passer par un std::ostringstream, puis le mettre dans un string pour le remettre dans un fstream ?
Autant mettre directement dans le fstream (qui est un ostringstream pour fichier).
Code C/C++ :
//std::string s;
//std::ostringstream oss;
//oss << a;
//s = oss.str();
outfile << a << std::endl;


PS: Évite les "using namespace", voir: [ Lien ]

________________________________________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
Merci d'utiliser Réponse acceptée si un post répond à votre question
mardi 21 juin 2011 à 17:44:40 | Re : efstream, impossibilité d'écrire dans un fichier .txt

LaGrandeBete06

"Il ne trouve pas ton fichier, tout simplement. Vérifie le dossier d'exécution ou indique un chemin absolu. "

comment je peux faire ca?
En fait je construit un fichier par simulation dans lequel je mets mes resultats. Tout va bien pour la création mais pour le reste ça ne m'écrit rien parce qu'entre deux méthodes le fichier se ferme ou se bloque.
Je ne peux pas indiquer un chemin absolu parce que mon chemin change.
Initialement ce code créait des fichier binaires mais je voudrais le changer pour créer des fichier.txt (plus facile d'utilisation sous excel)et ensuite des fichier csv (mais bon ça c'est le next step étant donné que je galère vachement sur le .txt déjà)
bon je ne sais pas si tu vas pouvoir m'aider, mais merci de ton temps et bonne fete de la musique!!!!!!

LaGrandeBete
mardi 21 juin 2011 à 17:52:07 | Re : efstream, impossibilité d'écrire dans un fichier .txt

CptPingu

Administrateur CodeS-SourceS

Je ne peux pas indiquer un chemin absolu parce que mon chemin change.


Aucun rapport. Un chemin absolu, contrairement à un chemin relatif, veut juste dire que tu indiques le chemin complet. Rien ne t'empêche d'avoir une partie variable.

m'écrit rien parce qu'entre deux méthodes le fichier se ferme ou se bloque.


Tu ne m'as toujours pas donné les informations suivantes qui me permettraient de vraiment t'aider:
- Que cherches-tu à faire ?
- Que fais ta classe ? Comment tu t'y prends ?

Je soupçonne une grosse erreur de conception. (Quand je vois ça: *this->parameters->inptr[0], ça me fait un peu peur).

________________________________________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
Merci d'utiliser Réponse acceptée si un post répond à votre question
mercredi 22 juin 2011 à 10:19:03 | Re : efstream, impossibilité d'écrire dans un fichier .txt

LaGrandeBete06


Merci pour ton aide
Ma classe représente un bloc qui fait les chose suivante:
- Elle récupère des données en input qui proviennent de simulations de Monte Carlo.
- Ces données sont chargées
- Puis je créé (veut créer) un fichier txt pour les afficher, (initialement le code créer un fichier de sortie en format binaire, mais je veut créer une nouvelle classe pour créer un fichier de sortie en format txt).
- J'écris une à une les données dans le fichier txt,
- Je réalise cette opération (création + écriture autant de fois qu'il y a de simulation de Monte Carlo)

voici ma classe:

#include "PricingWaveStdLib.h"
#include <iostream>
#include <fstream>
#include <sstream>


using namespace std;

PricingWaveKernel::Write_txt::Write_txt(void)
{
this->ResetParameters();
this->initialParameters = new PricingWaveKernel::BlockParameters(*this->parameters);
}
void PricingWaveKernel::Write_txt::InitializeSim(unsigned long simulationKey, unsigned long MCIterations)
{
std::ostringstream buff;
buff << this->GetParameters()->cparptr[0] << simulationKey << ".txt";
std::ofstream outfile(buff.str().c_str());
if (!outfile)
{
// Erreur d'ouverture du fichier
return;
}

}
void PricingWaveKernel::Write_txt::SimulateSim(unsigned long simulationKey, unsigned long MCIterations, unsigned long time)
{

// ecriture des résultats des simulations
double a = *this->parameters->inptr[0];
outfile << a << std::endl;

}

void PricingWaveKernel::Write_txt::FinalizeSim(unsigned long simulationKey, unsigned long MCIterations)
{
outfile.close();
}
void PricingWaveKernel::Write_txt::UpdateParameters(void)
{
}
void PricingWaveKernel::Write_txt::ResetParameters(void)
{
this->SetParameters(this->GetInitialParameters());
this->FinalizeParametersUpdate();
}
PricingWaveKernel::BlockParameters* PricingWaveKernel::Write_txt::GetInitialParameters(void) const
{
int i1[1] a= {-1};
char** inLabel = new char*[1];
inLabel[0] = "S";
int ncpar = 1;
int cparsz[1] = {1};
int cparsz2[1] = {1};
char** cparLabel = new char*[16];
cparLabel[0] = "Output Directory";
return new PricingWaveKernel::BlockParameters(0,1,i1,i1,inLabel,0,0,0,NULL,0,0,0,NULL,0,0,0,NULL,ncpar,cparsz,cparsz2,cparLabel);

}

Merci Pour ton temps CptPingu

LaGrandeBete
mercredi 22 juin 2011 à 10:26:39 | Re : efstream, impossibilité d'écrire dans un fichier .txt

CptPingu

Administrateur CodeS-SourceS
Réponse acceptée !
Si ton but est d'écrire dans le même fichier, à la suite, en utilisant ta classe comme classe d'écriture, alors il ne faut pas crééer de std::ofstream en local. Met le en attribut de ta classe.

Dans ton header, tu indiques un:
Code C/C++ :
private:
  std::ofstream   _outfile;


Dans "PricingWaveKernel::Write_txt::Write_txt(void)"
Code C/C++ :
_outfile.open(buff.str().c_str());
if (!_outfile)
{
  // Erreur d'ouverture du fichier
  return;
} 


Dans "void PricingWaveKernel::Write_txt::SimulateSim(unsigned long simulationKey, unsigned long MCIterations, unsigned long time)"
Code C/C++ :
  _outfile << *this->parameters->inptr[0] << std::endl;


Dans "void PricingWaveKernel::Write_txt::FinalizeSim(unsigned long simulationKey, unsigned long MCIterations)"
Code C/C++ :
_outfile.close();


________________________________________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
Merci d'utiliser Réponse acceptée si un post répond à votre question

1 2

Cette discussion est classée dans : fichier, long, txt, filename, unsigned


Répondre à ce message

Sujets en rapport avec ce message

Lire dans un *.txt un tableau de long ecrit par cfile [ par kididouille ] Bonjour j'ai un pb:J'ai un tableau de long  "long *TabProj;" je desire enregistrer le contenu de ce tableau dans un fichier texte: CFile Fichier;Fichi Lecture Fichier TXT [ par DroledeBx ] Bonjour,j'ai un problème de récupération des données à partir d'un fichier texte.Chaque ligne de mon fichier txt est sous la forme:"un_entier un_doubl création de fichier texte [ par dissaben ] Bonjour, Je suis arrivé à créer un fichier texte, afin le code compilé ne genère  aucune erreur, mais je voudrais savoir ou se trouve le fichier texte utilisation de scripte stoquer dans un fichier txt ??? [ par li ] bonjour, certain programme, plus souvent des serveurs de jeu utilise des fichier dans lequel se trouve des scriptes non compiler que laplication utili mfc [ par mounboul ] salut tous le mondej'utilise un OCX pour tracher des valeurs des capteurs d'un fichier .txt(ça j'ai réussie) qui contient 170000 lignes et 3 colonnes Problème avec "fclose" [ par Polack77 ] Bonjours, cas fais 2 heures que je cherche mon bug et je ne trouve pas! C'est frustrant!J'ai fais pas mal de test et je ne trouve rien.Je met donc mon Mettre la date dans un nom de fichier [ par IRIS21 ] Bonjour a tousj'ai un petite question a poser : je voudrais savoir comment faire pour "inserer" la date en nom de fichier lors de la création de celui Parcours de fichier [ par mmx1 ] Bonjour, j'ai un petit code qui prend en paramètre un fichier txt et qui créer un fichier du même nom mais en .rawje voudrais ne plus utiliser ces par aide sur signature numerique dun fichier .txt [ par xgtm666 ] Bonsoir tout le monde,   J'ai besoin de votre aide,de m'explique :  Jai un server ou les fichier .txt son securiser dorigine par une signature.toute m récupérer des lignes d'un fichier txt [ par the_neo_81 ] Bonjour à tous, voila donc ma question.Cela fait un bon moment que je cherche à:    -lire un fichier txt préformater (je sais que tel ligne  = tel inf


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 3,510 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales