petit probleme d'ecriture dans un fichier

petit probleme d'ecriture dans un fichier - C++ - Programmation

Marsh Posté le 26-04-2005 à 19:34:32    

bonjour, voila j'ai fait un petit prog et j'ai besoin de lire et ecrire dans un fichier
mais probleme : les lectures ce font tres bien mais pour ecrire il se passe rien.
 

Code :
  1. dans le .h
  2. def de la classe
  3. ..
  4. fstream file;
  5. ...
  6. dans le .cpp
  7. ...//contructeur d'une classe
  8. string dossier = "test";
  9. file.open(dossier.c_str(), ios::out|ios::in);
  10. ...
  11. //une metodes de cette classe
  12. ...
  13. char buffer[512];
  14. file.getline(buffer,512);
  15. ...
  16. //une metodes de cette classe
  17. ...
  18. file.seekp(0,ios::beg);//positionnement au début
  19.     file<<"test";
  20. ...


 
voila j'espers que vous pourez m'aider a comprendre pourquoi je peut pas ecrire ( ou plutot pourquoi ca ecrit pas car j'ai pas d'erreurs! )


Message édité par carot0 le 26-04-2005 à 20:39:26

---------------
In a world without walls and fences, who needs Windows and Gates
Reply

Marsh Posté le 26-04-2005 à 19:34:32   

Reply

Marsh Posté le 26-04-2005 à 19:40:47    

ostream pour ecrire, istream pour lire ....

Reply

Marsh Posté le 26-04-2005 à 19:51:06    

dossier.data() -> dossier.c_str()

Reply

Marsh Posté le 26-04-2005 à 20:13:45    

Joel F a écrit :

ostream pour ecrire, istream pour lire ....


moi je veux lire et ecrire d'ou le fstream et non un ofstream ou ifstream
 
taz : y a t'il un reel interet de prendre c_str() a la place de data() ?


---------------
In a world without walls and fences, who needs Windows and Gates
Reply

Marsh Posté le 26-04-2005 à 20:30:59    

oui, parce que .data() n'est pas forcément terminé par un '\0'

Reply

Marsh Posté le 26-04-2005 à 20:39:02    

Taz a écrit :

oui, parce que .data() n'est pas forcément terminé par un '\0'


ok, j'ignorais totalement ce fait, merci
 
si non pour mon petit soucis ?
je précise que les lectures se font sans problemes


---------------
In a world without walls and fences, who needs Windows and Gates
Reply

Marsh Posté le 26-04-2005 à 21:09:53    

T'aurais pas ouvert ton fichier en binaire par hasard ? (je sais plus, faut que je regarde la doc)

Reply

Marsh Posté le 26-04-2005 à 21:17:03    

Heu je sais que pour les ostream faut faire à la fin un endl pour etre sur qu'il écrit, sinon c'est assez dangeureux d'ouvrir un fichier en lecture et écriture :s
Pour finir pour etre bien sur qu'il a écrit un .close(); et après un .clear();

Reply

Marsh Posté le 26-04-2005 à 21:39:27    

el muchacho a écrit :

T'aurais pas ouvert ton fichier en binaire par hasard ? (je sais plus, faut que je regarde la doc)


ha bas oui pt etre ! faut que je verifie.
 
edit : non c'est bon par defaut il l'ouvre en text mode


Message édité par carot0 le 26-04-2005 à 21:43:31

---------------
In a world without walls and fences, who needs Windows and Gates
Reply

Marsh Posté le 26-04-2005 à 21:40:11    

LordHarryPotter a écrit :

Heu je sais que pour les ostream faut faire à la fin un endl pour etre sur qu'il écrit, sinon c'est assez dangeureux d'ouvrir un fichier en lecture et écriture :s
Pour finir pour etre bien sur qu'il a écrit un .close(); et après un .clear();


le close est dans le destructeur de ma classe et le clear je m'en suis jamais servis
 
 
edit ; si tu connais une meilleur solution pour lire un fichier puis ecrire dedant je suis prenneur !


Message édité par carot0 le 26-04-2005 à 21:45:14

---------------
In a world without walls and fences, who needs Windows and Gates
Reply

Marsh Posté le 26-04-2005 à 21:40:11   

Reply

Marsh Posté le 26-04-2005 à 22:17:01    

pas la peine d'appeler close() (et encore moins clear) dans le destructeur, il est appelé lors de la destruction de ton std::fstream
 
montre plus de code, la il y a aucun probleme

Reply

Marsh Posté le 26-04-2005 à 22:28:07    

skelter a écrit :

pas la peine d'appeler close() (et encore moins clear) dans le destructeur, il est appelé lors de la destruction de ton std::fstream
 
montre plus de code, la il y a aucun probleme


dans ce que j'ai mis y a tt ce que je fait avec fstream
 

Code :
  1. //ds contruct
  2. file.open(dossier.c_str(), ios::in|ios::out);
  3. //ds methode
  4. do
  5. file.getline(buffer,512);
  6. while;
  7. file.getline(buffer,512);
  8. file.getline(buffer,512);
  9. do
  10. file.getline(buffer,512);
  11. while;
  12. //ds une autre methodes
  13. file.seekp(0,ios::beg);//positionnement au début
  14. file<<"test"<<endl;
  15. //ds destruct
  16. file.close


 
voila les seules utilisation que je fait des fstream le reste du code n'est pas important ( enfin pas pour les fstream ) a part les fstream il y a juste des manipulations de buffer et de chaines de caracteres
toutes mes methodes sont appelé, avec des cout je vois les contenu de mes buffers qui contiennent bien les parties desiré de monfichiers
je precise que je boss avec dev c++ 4.9.9.2


Message édité par carot0 le 26-04-2005 à 22:31:02

---------------
In a world without walls and fences, who needs Windows and Gates
Reply

Marsh Posté le 26-04-2005 à 22:36:08    

essay ce code dans un programe à part, tu veras que ca fonctionne

Reply

Marsh Posté le 26-04-2005 à 22:52:21    

skelter a écrit :

essay ce code dans un programe à part, tu veras que ca fonctionne


apres test bas ca ne marche pas du tout je comprends plus rien !!

Code :
  1. #include <cstdlib>
  2. #include <iostream>
  3. #include <string>
  4. #include <fstream>
  5. using namespace std;
  6. int main(int argc, char *argv[])
  7. {
  8.     fstream file("D:\\desktop.ini", ios::in|ios::out);
  9. file<<"test";
  10. system("PAUSE" );
  11.     return EXIT_SUCCESS;
  12. }


 
ce code la n'ecrit rien ds mon fichier desktop.ini


---------------
In a world without walls and fences, who needs Windows and Gates
Reply

Marsh Posté le 26-04-2005 à 22:58:45    

les test te dirons
if ( !file ) ...
if ( file<<"test" ) ...

Reply

Marsh Posté le 26-04-2005 à 23:09:22    

skelter a écrit :

les test te dirons
if ( !file ) ...
if ( file<<"test" ) ...


deja le 1er test est faux! doncfile a une valeur differente de 0 ( donc le fichier est bien ouvert )
et if(file<<"test" ) est passé donc file<<"test" retourne bien une valeure aussi


---------------
In a world without walls and fences, who needs Windows and Gates
Reply

Marsh Posté le 26-04-2005 à 23:22:08    

la je vois pas  :??: , j'ai essayé avec devcpp 4.9.8.0 et ca marche

Reply

Marsh Posté le 26-04-2005 à 23:33:27    

skelter a écrit :

la je vois pas  :??: , j'ai essayé avec devcpp 4.9.8.0 et ca marche


ca peut etre ca qui gene : ios::in|ios::out
edit : avec juste ios::out ca ecrit !
 
edit 2 : y a moyen de changé la facon d'ouvrir un fichier en cour de prog ? genre ouvert en lecture au debut puis en ecriture a la fin ?
 
apres 2-3 test j'ai trouvé ca sous visual meme probleme!
avec

Code :
  1. fstream file("D:\\desktop.ini", ios::out|ios::in);
  2.    
  3.    
  4.    
  5. file<<"test6";

 
ca ecrit et  

Code :
  1. fstream file("D:\\desktop.ini", ios::out|ios::in);
  2.    
  3.     file.getline(buffer,512);
  4.    
  5. file<<"test6";


ca ecrit plus !


Message édité par carot0 le 27-04-2005 à 00:08:14

---------------
In a world without walls and fences, who needs Windows and Gates
Reply

Marsh Posté le 27-04-2005 à 07:50:07    

file.seekp(0);  :??: t'y avais pensé pourtant au debut

Reply

Marsh Posté le 27-04-2005 à 11:46:44    

skelter a écrit :

file.seekp(0);  :??: t'y avais pensé pourtant au debut


ca change rien.
 

Code :
  1. char buffer[512];
  2.          fstream file("D:\\desktop.ini", ios::out|ios::in);
  3.          
  4.          file.getline(buffer,512);
  5.           file.seekp(0);
  6.          file<<"test6";


 
ce code ecrit rien!


---------------
In a world without walls and fences, who needs Windows and Gates
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed