Ifstream binaire oui mais où je veux

Résolu
victorcoasne Messages postés 1101 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 23 juillet 2023 - 25 août 2004 à 19:45
victorcoasne Messages postés 1101 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 23 juillet 2023 - 26 août 2004 à 12:17
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

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
25 août 2004 à 23:08
__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++
3
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
25 août 2004 à 20:06
seekg, regarde le profil ds msdn, je connais pas par coeur (me rappelle plus dsl)
0
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
25 août 2004 à 20:09
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
0
victorcoasne Messages postés 1101 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 23 juillet 2023 7
25 août 2004 à 20:45
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
25 août 2004 à 20:50
met ton code pr voir? sinon fouille msdn, pitetre pr les binary ca marche pas....
0
victorcoasne Messages postés 1101 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 23 juillet 2023 7
25 août 2004 à 20:54
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
0
victorcoasne Messages postés 1101 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 23 juillet 2023 7
25 août 2004 à 20:55
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
0
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
25 août 2004 à 21:04
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');
0
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
25 août 2004 à 21:05
sinon dis moi ske tu veux faire exactement, ca sera plus simple
0
victorcoasne Messages postés 1101 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 23 juillet 2023 7
25 août 2004 à 21:06
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
0
victorcoasne Messages postés 1101 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 23 juillet 2023 7
25 août 2004 à 21:16
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
0
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
25 août 2004 à 21:20
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...)
0
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
25 août 2004 à 21:25
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
0
victorcoasne Messages postés 1101 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 23 juillet 2023 7
25 août 2004 à 21:30
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
0
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
25 août 2004 à 21:31
cest ke la constante est pas end............je fouille et je te dis ce que c'est exactement
0
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
25 août 2004 à 21:36
pourtant c'est bien end.................post ton code, pour voir?
0
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
25 août 2004 à 21:37
avec l'erreur a la compilation aussi
0
victorcoasne Messages postés 1101 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 23 juillet 2023 7
25 août 2004 à 21:38
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
0
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
25 août 2004 à 21:56
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...
0
victorcoasne Messages postés 1101 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 23 juillet 2023 7
25 août 2004 à 22:00
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
0
Rejoignez-nous