Sujet: [C++] lecture d un fichier java par un

Fermé
suber600 - 30 sept. 2002 à 14:39
 hibour - 17 déc. 2007 à 17:41
voila le but: creer un fichier en java ( mais au niveau byte ... c est a dire avec le bloc note on comprend rien) et le faire relire par un programme C++.

J aimerais savoir si c est possible , le fichier je compose d entier et de float (ou double).

J arrive a creer un fichier un java mais mon programme c++ n arrive pas a le lire.
Voici un programme en C++ qui ecrit des entier et qui les lit(le programe fonctionne):


// programme C++ qui ecrit et qui lit des entiers

// labo1_3.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <fstream.h>
#include <stdlib.h>
#include <stdio.h>



void main (void)
{

filebuf fichier;
int n;
// double dou=5;

//ecriture dans un fichier

if(!fichier.open ("fDOWNLOAD/Classictest.txt",ios::out))
{
cout<<"Erreur d ouverture!"<<endl;
exit(1);
}
ostream flux(&fichier);
for(int i=10;i>0;i--)
{
n=i*5-6;
cout<<i<<"(I) on ecrit "<<n<<endl;
flux.write((char*)&n,sizeof(int));
// flux.write((char*)&dou,sizeof(double));

}
flux.flush();
fichier.close();



cout<<"lecture du fichier"<<endl;
//if(!fichier.open ("FClassic.txt",ios::in))
if(!fichier.open ("fDOWNLOAD/Classictest.txt",ios::in))
{
cout<<"Erreur d ouverture!"<<endl;
exit(1);
}

cout<<"Apres lecture du fichier"<<endl;


istream fluxi(&fichier);
fluxi.read((char*)&n,sizeof(int));
while(!fluxi.eof())
{
cout<<"Le fichier cree en java contient : "<<n<<endl;
fluxi.read((char*)&n,sizeof(int));
//fluxi.read((char*)&n,sizeof(double));
}

fichier.close();

cout<<"Fermeture du fichier"<<endl;

}



biensur lorque je lui donne mon fichier java cela ne marche pas


voila le but: creer un fichier en java ( mais au niveau byte ... c est a dire avec le bloc note on comprend rien) et le faire relire par un programme C++.

J aimerais savoir si c est possible , le fichier je compose d entier et de float (ou double).

J arrive a creer un fichier un java mais mon programme c++ n arrive pas a le lire.
Voici un programme en C++ qui ecrit des entier et qui les lit(le programe fonctionne):


// programme C++ qui ecrit et qui lit des entiers

// labo1_3.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <fstream.h>
#include <stdlib.h>
#include <stdio.h>



void main (void)
{

filebuf fichier;
int n;
// double dou=5;

//ecriture dans un fichier

if(!fichier.open ("fDOWNLOAD/Classictest.txt",ios::out))
{
cout<<"Erreur d ouverture!"<<endl;
exit(1);
}
ostream flux(&fichier);
for(int i=10;i>0;i--)
{
n=i*5-6;
cout<<i<<"(I) on ecrit "<<n<<endl;
flux.write((char*)&n,sizeof(int));
// flux.write((char*)&dou,sizeof(double));

}
flux.flush();
fichier.close();



cout<<"lecture du fichier"<<endl;
//if(!fichier.open ("FClassic.txt",ios::in))
if(!fichier.open ("fDOWNLOAD/Classictest.txt",ios::in))
{
cout<<"Erreur d ouverture!"<<endl;
exit(1);
}

cout<<"Apres lecture du fichier"<<endl;


istream fluxi(&fichier);
fluxi.read((char*)&n,sizeof(int));
while(!fluxi.eof())
{
cout<<"Le fichier cree en java contient : "<<n<<endl;
fluxi.read((char*)&n,sizeof(int));
//fluxi.read((char*)&n,sizeof(double));
}

fichier.close();

cout<<"Fermeture du fichier"<<endl;

}



biensur lorque je lui donne mon fichier java cela ne marche pas


voila le but: creer un fichier en java ( mais au niveau byte ... c est a dire avec le bloc note on comprend rien) et le faire relire par un programme C++.

J aimerais savoir si c est possible , le fichier je compose d entier et de float (ou double).

J arrive a creer un fichier un java mais mon programme c++ n arrive pas a le lire.
Voici un programme en C++ qui ecrit des entier et qui les lit(le programe fonctionne):


// programme C++ qui ecrit et qui lit des entiers

// labo1_3.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <fstream.h>
#include <stdlib.h>
#include <stdio.h>



void main (void)
{

filebuf fichier;
int n;
// double dou=5;

//ecriture dans un fichier

if(!fichier.open ("fDOWNLOAD/Classictest.txt",ios::out))
{
cout<<"Erreur d ouverture!"<<endl;
exit(1);
}
ostream flux(&fichier);
for(int i=10;i>0;i--)
{
n=i*5-6;
cout<<i<<"(I) on ecrit "<<n<<endl;
flux.write((char*)&n,sizeof(int));
// flux.write((char*)&dou,sizeof(double));

}
flux.flush();
fichier.close();



cout<<"lecture du fichier"<<endl;
//if(!fichier.open ("FClassic.txt",ios::in))
if(!fichier.open ("fDOWNLOAD/Classictest.txt",ios::in))
{
cout<<"Erreur d ouverture!"<<endl;
exit(1);
}

cout<<"Apres lecture du fichier"<<endl;


istream fluxi(&fichier);
fluxi.read((char*)&n,sizeof(int));
while(!fluxi.eof())
{
cout<<"Le fichier cree en java contient : "<<n<<endl;
fluxi.read((char*)&n,sizeof(int));
//fluxi.read((char*)&n,sizeof(double));
}

fichier.close();

cout<<"Fermeture du fichier"<<endl;

}



biensur lorque je lui donne mon fichier java cela ne marche pas

2 réponses

tafiscobar Messages postés 1277 Date d'inscription jeudi 7 décembre 2000 Statut Contributeur Dernière intervention 26 février 2009 177
30 sept. 2002 à 16:33
je n'ai pas lu ton code et je n'ai meme pas envie, mais je pense q tu n pourras lire ton fichier fait en java car les données sont codées sur 1 octet(un byte c'est sur un octet) et un int en C++,c'est sur 4octets, donc essaies de prendre un autre type,je ne sais pas moi, essaies peut etre short.
tafiscobar
0
Ce n'est pas possible de lire en java un fichier écrit en C/C++ (et inversement), car le codage des types de données n'est pas le même dans les 2 langages, par exemple : un char est sur 1 octet en C/C++, en Java c'est sur 2 octet, il y aussi le probleme d'architecture des big endian/little endian (https://fr.wikipedia.org/wiki/Endianness , c'est pour ça on trouve des Middlewares comme CORBA, SOAP..etc (des couches intermédiaire capable de faire le codage,/décodage des informations)

Si tu veux le faire vraiment alors soit tu utilise ces Middleware, soit tu écrit ton popre codeur/décodeur de format pour bien lire/écrire les données dans le bon ordre càd écrire des bytes bien ordonné après les lire dans le même ordre. utilise byte en java et char en C/C++.

;-)
0