Ifstream binaire oui mais où je veux [Résolu]

Signaler
Messages postés
1100
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 octobre 2012
-
Messages postés
1100
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 octobre 2012
-
Comment mettre à une position de caractère précis le "curseur" de lecture du fichier ?

Début :
ifstream fichiero("fichier.exe",ios::in|ios::binary);


Vous voulez des RPG gratuits allez sur http://jeux.jscv.com !!!

Le créateur du site http://www.jscv.com

40 réponses

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
25
__int64 __stdcall TailleFichier(char *pszfl)
{
LARGE_INTEGER r;
WIN32_FIND_DATA wfd;
HANDLE hfl = FindFirstFile(pszfl, &wfd);
if(hfl == INVALID_HANDLE_VALUE) return 0;
FindClose(hfl);
r.HighPart = wfd.nFileSizeHigh;
r.LowPart = wfd.nFileSizeLow;
return r.QuadPart;
}

pas vu que j'avais juste tape 2 fois r.HighPart au lieu de r.LowPart, now va bon.

ciao...
BruNews, Admin CS, MVP VC++
Messages postés
1160
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
21 octobre 2010
17
seekg, regarde le profil ds msdn, je connais pas par coeur (me rappelle plus dsl)
Messages postés
1160
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
21 octobre 2010
17
je crois que cest seekg (int nombre_d_octets, ios_base::CSTE);
la constante étant la position a partir de laquelle on compte le nombre d'octets, et il me semble que par defaut cest la position courante, mais a verifier
Messages postés
1100
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 octobre 2012
6
Merci mais ça marche pas !!!

Vous voulez des RPG gratuits allez sur http://jeux.jscv.com !!!

Le créateur du site http://www.jscv.com
Messages postés
1160
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
21 octobre 2010
17
met ton code pr voir? sinon fouille msdn, pitetre pr les binary ca marche pas....
Messages postés
1100
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 octobre 2012
6
oublie l'histoire binaire retient juste position avec ifstream.

Mon code
long long nb=0; 
ifstream fichiero(fchieraoubiinnbtff,ios::in|ios::binary);
if (!fichiero){return -1;}
char temp[1000]; char tempp;
fichiero.read(temp,sizeof(temp));
while (!fichiero.eof())
{fichiero.read(temp,sizeof(temp));nb+=1000;}
fichiero.close();
long nbfois=nb/1000;
ifstream fichieros(fchieraoubiinnbtff,ios::in|ios::binary);
/*ici on met soit un retour en arrière de 1000 octets (caractère) ou soit la position nb*/


Vous voulez des RPG gratuits allez sur http://jeux.jscv.com !!!

Le créateur du site http://www.jscv.com
Messages postés
1100
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 octobre 2012
6
Correction du code :
long long nb=0; 
ifstream fichiero("nomdufichier.txt",ios::in|ios::binary);
if (!fichiero){return -1;}
char temp[1000];
fichiero.read(temp,sizeof(temp));
while (!fichiero.eof())
{fichiero.read(temp,sizeof(temp));nb+=1000;}
/*ici on met soit un retour en arrière de 1000 octets (caractère) ou soit la position nb*/


Vous voulez des RPG gratuits allez sur http://jeux.jscv.com !!!

Le créateur du site http://www.jscv.com
Messages postés
1160
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
21 octobre 2010
17
fichiero.seekg (-1000, ios_base::cur);

et pk tu lis les caracteres 1000 par 1000? ya une raison particuliere? sinon tu peux faire des getline (fichiero, TaString);
ou encore des getline (fichiero, TaString, 'caracteredefindesaisie');
Messages postés
1160
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
21 octobre 2010
17
sinon dis moi ske tu veux faire exactement, ca sera plus simple
Messages postés
1100
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 octobre 2012
6
oui la raison c'est pour aller plus vite

Vous voulez des RPG gratuits allez sur http://jeux.jscv.com !!!

Le créateur du site http://www.jscv.com
Messages postés
1100
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 octobre 2012
6
Je voulais savoir la taille d'un fichier !!
en faisant comme tu dis ça marche pas !!

Vous voulez des RPG gratuits allez sur http://jeux.jscv.com !!!

Le créateur du site http://www.jscv.com
Messages postés
1160
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
21 octobre 2010
17
kan tarrive a la fin du fichier ton flux est en echec....tu peux pas faire seekg, javais pas pensé
avant le seekg, il faut que tu fasse un fichiero.clear(), mais tauras un probleme en faisant comme ca......paske tu vas reculer de 1000 octets a partir de la fin du fichier, et non a partir de l'endroit ou tu a depassé......si tu veux savoir, tu vas devoir lire les caracteres un par un et compter un par un.....ou alors trouver une fonction qui donne la taille du fichier (mais je connais pas...)
Messages postés
1160
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
21 octobre 2010
17
une feinte a tester: ouvre le fichier ainsi :
ifstream is ("nomfic.txt", ios_base::end);
cout << is.tellg();
si ca marche pas c'est que le ::end te met apres la fin du fichier, fait donc
ifstream is ("nomfic.txt", ios_base::end);
is.seekg (-1);
cout << is.tellg();

ca ca marchera peut-etre. si la valeur est bizarre, cest ke ca te renvoie la constante qu vaut "fin de fichier", ds ce cas, recule encore de 1, prend la valeur et ajoute lui 1.....voila, j'espere ke meme si ce que je dis est pas parfaitement exact ca t'aidera
Messages postés
1100
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 octobre 2012
6
ios_base::end génère une erreur !

Vous voulez des RPG gratuits allez sur http://jeux.jscv.com !!!

Le créateur du site http://www.jscv.com
Messages postés
1160
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
21 octobre 2010
17
cest ke la constante est pas end............je fouille et je te dis ce que c'est exactement
Messages postés
1160
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
21 octobre 2010
17
pourtant c'est bien end.................post ton code, pour voir?
Messages postés
1160
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
21 octobre 2010
17
avec l'erreur a la compilation aussi
Messages postés
1100
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 octobre 2012
6
ifstream fichiero(fichierao,ios::in|ios::binary|ios_base::end);

ou

ifstream fichiero(fichierao,ios_base::end);

Vous voulez des RPG gratuits allez sur http://jeux.jscv.com !!!

Le créateur du site http://www.jscv.com
Messages postés
1160
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
21 octobre 2010
17
le nom du fichier doit etre un ntcts, est ce que c'est bien le cas dans ce que tu as fait? c'est a dire que si c'est une string, tu dois faire fichierao.c_str(), ou mettre le nom entre guillemets, si c'est un tableau de char, je vois pas d'ou viens l'erreur. d'ailleurs dans ta premiere version de code, il me semble bien que c'est io_base::in | ios_base::binary et pas ios::in | ios::binary. a verifier, mais il me semble...
Messages postés
1100
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 octobre 2012
6
dsl pas de base et mon fichierao et déclaré de la sorte
char fichierao[MAX_PATH*2];


Vous voulez des RPG gratuits allez sur http://jeux.jscv.com !!!

Le créateur du site http://www.jscv.com