romca
Messages postés48Date d'inscriptionmercredi 26 janvier 2005StatutMembreDernière intervention19 avril 2010
-
14 mai 2005 à 17:32
romca
Messages postés48Date d'inscriptionmercredi 26 janvier 2005StatutMembreDernière intervention19 avril 2010
-
16 mai 2005 à 22:31
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
#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 "<>n;
if(n!=0) fichierInOut.write((char*)&n,sizeof(int));
}while(n);
while(numero>=0)
{
cout<<"\nnumero de l'entier recherche: ";
cin>>numero;
mezaya
Messages postés202Date d'inscriptiondimanche 18 mai 2003StatutMembreDernière intervention 6 mars 2010 14 mai 2005 à 20:44
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.
romca
Messages postés48Date d'inscriptionmercredi 26 janvier 2005StatutMembreDernière intervention19 avril 2010 14 mai 2005 à 20:58
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?
romca
Messages postés48Date d'inscriptionmercredi 26 janvier 2005StatutMembreDernière intervention19 avril 2010 15 mai 2005 à 10:56
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).
...?
Vous n’avez pas trouvé la réponse que vous recherchez ?
mezaya
Messages postés202Date d'inscriptiondimanche 18 mai 2003StatutMembreDernière intervention 6 mars 2010 15 mai 2005 à 11:30
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);
romca
Messages postés48Date d'inscriptionmercredi 26 janvier 2005StatutMembreDernière intervention19 avril 2010 16 mai 2005 à 19:11
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 ...
mezaya
Messages postés202Date d'inscriptiondimanche 18 mai 2003StatutMembreDernière intervention 6 mars 2010 16 mai 2005 à 20:19
"les droits" --> si tu est sous XP, est tu administrateur.
Au pire essaye avec 2 fstream. un pour l'écriture et un pour la
lecture. pense a bien fermer le fichier entre l'écriture et la lecture
avec un fichier.close();
romca
Messages postés48Date d'inscriptionmercredi 26 janvier 2005StatutMembreDernière intervention19 avril 2010 16 mai 2005 à 20:59
Ok, oui je suis bien en admin sous XP.
Je comprend ce que tu me conseil de faire avec les 2 fstream mais c'est un corrigé de cours. Ce serait bien que ça fonctionne avec la classe fstream au lieu de ifstream et ofstream car j'ai déjà un exemple avec ces 2 classes.
Tu me diras je peux demander au prof mais c'est des cours du CNED(par correspondance) et il va se passer du temps avant qu'il me réponde.....
Mais si on trouve pas tant pis, j'enverrais quand même un mail...