Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : classe fstream [ Archives / Au secours ] (romca)

samedi 14 mai 2005 à 17:32:47 | classe fstream

romca

SalutJ à tous, j'ai un petit souci sur un corrigé de cours qui ne fonctionne pas. Le but était de rentrer des nombres entiers dans un fichier binaire puis en choisissant la position du nombre à l'aide de seekg() de retrouver ce nombre; tout ceci en utilisant la classe fstream. Mais voilà des que je rentre le nom du fichier j'ai une erreur; Le programme fonctionne en retirant l'argument "ios::binary" dans la declaration de "fichierInOut" mais voila il faut que ce soit un fichier binaire. Comment rectifier le corrigé pour que cela fonctionne? (Je travaille sous visual C++)
Merci, le prog:

#include<iostream.h>
#include<conio.h>
#include<stdio.h>
#include<fstream>
#include<stdlib.h>//pour la fonction exit

using namespace std;

int main(int argc,char*argv[])
{
 try
 {
 char nomfichier[21];
 int n,i=0;
 long numero=0;
 printf("Donner le nom du fichier a creer: ");
 cin>>nomfichier;
 fstream fichierInOut(nomfichier,ios::in|ios::out|ios::binary);
 if(fichierInOut.fail()) throw "Erreur d'ouverture fichier";
 
 do
 {
  cout<<"Entrer un entier en position "<<i++<<" (0 pour finir): ";
  cin>>n;
if(n!=0) fichierInOut.write((char*)&n,sizeof(int));

 }while(n);


 while(numero>=0)
 {
  cout<<"\nnumero de l'entier recherche: ";
  cin>>numero;
  
  fichierInOut.seekg(sizeof(int)*numero,ios_base::beg);
  
  if (fichierInOut.read((char*)&n,sizeof(int)))
   cout<<"La valeur lue est: "<<n<<endl;
  else throw "Erreur de lecture";
 }
 fichierInOut.close();
 }

 catch(char *erreur)
 {
  cout<<erreur<<endl;
  getch();
  exit (1);
 }

 getch();
 return 0;
 
}
 


samedi 14 mai 2005 à 20:44:45 | Re : classe fstream

mezaya

si tu veut écrit avec dans un fichier binaire la surchage d'opérateur << et >> ne marche pas, car il supprimera tout caractère n'étant pas du texte. pour écrire en binaire utilise les fonctions read() et write() de la classe fstream.

Voili,Voilou

samedi 14 mai 2005 à 20:58:36 | Re : classe fstream

romca

Merci "mezaya",
Ok mais alors comment fait on dans le prog pour rentré le nom du programme dans "nomfichier"? je dois enlevé "cin>>nomfichier" et utiliser a la place write()? Car des que je rentre le nom en caractere (j'ai même essaye de mettre un chiffre à la place), il me met quand meme une erreur d'ouverture de fichier?

samedi 14 mai 2005 à 21:36:55 | Re : classe fstream

mezaya

t'as mis "ios::in" alors qu'il faut mettre "ios::out".

in est pour la lecture
out pour l'écriture

c'est pour ça que tu peut pas créer ton fichier

Voili,Voilou

dimanche 15 mai 2005 à 10:56:18 | Re : classe fstream

romca

Je vais te paraître embêtant mais même si je retire ios::in et que je laisse "ios::out|ios::binary" il me crée quand même une erreur d'ouverture de fichier.
En retirant par la suite "ios::binary" j'arrive a ouvrir le fichier, a rentrer des "entiers" mais lorsque je passe en lecture il me cré une erreur de lecture: Normal je pense car "fichierInOut" n'a été déclaré qu'en écriture.
Mais je pense que je suis obligé de mettre "ios::in" car dans la classe fsrtream, les fichiers sont en lecture et ecriture (d'apres mon cours).
...?  

dimanche 15 mai 2005 à 11:28:29 | Re : classe fstream

bayeto

Membre Club
Je crois qu'il manque un ios::trunc, s'il faut vraiment créer le fichier.

mayonaise tournera, bientôt, très bientôt...


dimanche 15 mai 2005 à 11:30:24 | Re : classe fstream

mezaya

j'ai tester ton programme il faut ajouter l'option ios::trunc en plus.
cette fonction permet de vider le fichier si il existe. les fonctions ios::in|ios::out|ios::binary marchait bien quand le fichier existait mais planter quand le fichier n'existe pas je sais pas trop pourquoi mais avec le flag trunc ça marche dans tous les cas.

donc :  fstream fichierInOut(nomfichier, ios::in|ios::out|ios::trunc| ios::binary);


Voili,Voilou

lundi 16 mai 2005 à 19:11:27 | Re : classe fstream

romca

Ok merci; j'ai essayé comme tu m'as dis avec "trunc" mais je comprend rien chez moi ça ne fonctionne pas?? est ce que ça vient de mon environnement (Visual C++)??? désolé de t'embeter encore une fois ...

lundi 16 mai 2005 à 19:22:27 | Re : classe fstream

mezaya

ça vient pas de visual car je l'ai testé sous visual ( .net ). est ce que tu as bien tout les droits ?
il te met la même erreur ?

Voili,Voilou

lundi 16 mai 2005 à 19:52:52 | Re : classe fstream

romca

Oui il me met la même erreur. Qu'est ce que tu entends par tous les droits?


1 2

Cette discussion est classé dans : fichier, int, include, ios, fichierinout


Répondre à ce message

Sujets en rapport avec ce message

c++ creation d'un fichier texte a nom variable [ par sloaneaaaa ] ben voila je voudrai creer un fichier texte auquel je puisse donner n'importe quel nom ms g des erreurs que je comprend pasle nom de fichier est ds un aidez moi c pour lire ds un fichier question bateau... [ par roomsmush ] pkoi ce code ne marche pas j'ai beau me casser la tete sur mon ecran rien y fait : sachant que c:\fcach est rampli par la chaîne suivante : "c:\fichie Probleme pointeur ? [ par foxtrox ] Salut,J'essai de realiser un prog permettant de modifier une valeur d'offset dans un exécutable. Malheureusement il y a un point sur lequel je bloque Appel d'une fonction contenue dans une dll [ par ybuchheit ] Bonjour, je souhaiterais appeler une fonction contenue dans une dll. Je n'ai pas le source de cette dll, le seul fichier dont je dispose est le .dll fichier [ par infodaoudi ] je veux afficher la classes suivante dans un fichier binaire: class Noeud { public: int nbEntree; PageRegion *fils[C+1]; } avec: class PageRegion Lire des chiffres avec les virgules [ par Stiko ] salut, j'ai fait un petit programme pour ouvrire un fichier texte qui contient seument des chifres séparées par des points virgules.ce programme lit l Probleme ASCII et coonversion string vers char (enfin je pense) [ par Leptis ] Salut a tous les pgm qu'il y a sur ce site. Avant tout je tien à vous prévenir que je suis en gros newbie en C.Voila mon problème : je cherche à faire Utilisation du settimer [ par titi4659 ] Bonjour,je souhaiterai utiliser le SetTimer() mais j'ai des problèmes avec:J'utilise bien une fonction callback dans laquelle je vais écrire dans un f Lecture fichier impossible avec SDL [ par CCJ ] Hello.j'utilise SDL pour me faire un petit jeu 2D. Seulement je recontre actuellement un petit probleme. Il semblerait en effet qu'il bloque l'utilisa Recuperer PID de l'appli et ecrire dans un fichier [ par Metalbobinou ] Bonsoir,Alors voila, vu que j'ai du mal en C, et que cela va etre necessaire que j'en fasse pour mes etudes, j'ai decide de m'y mettre.J'ai voulu fair


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



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
Temps d'éxécution de la page : 3,182 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.