Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1376 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [C++] Récupérer la taille d'un fichier binaire

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++] Récupérer la taille d'un fichier binaire

n°2034548
Terminapor
I'll see you rise.
Posté le 07-11-2010 à 23:26:47  profilanswer
 

Bonsoiiiir \o/
 
Bon, j'suis en plein dans la prog d'une DLL, et je dois récupérer des valeurs dans un fichier en binaire (ça marche niquel), maintenant faut que j'exécute en boucle cette action (loop for vu que je rempli un tableau 2D), mais comment je peux récupérer la taille du fichier ? Histoire que ma loop for marche bien :D
 
Merci d'votre aide :jap:


---------------
Perhaps you don't deserve to breathe
mood
Publicité
Posté le 07-11-2010 à 23:26:47  profilanswer
 

n°2034550
breizhbugs
Posté le 08-11-2010 à 00:48:41  profilanswer
 

En supposant que tu utilises l'api windows, il y a http://msdn.microsoft.com/en-us/li [...] 85%29.aspx
Sinon, si tu contrôles le format du fichier binaire, tu peux y mettre au début/ a la fin une structure pour indiquer le nombre d'enregistrement qu'il contient...

n°2034556
Terminapor
I'll see you rise.
Posté le 08-11-2010 à 01:24:40  profilanswer
 

Pas moyens via la librairie fstream ?

 

edit : c'est bon, voilà mon code :D

 
Code :
  1. //FILESIZE
  2. f.seekg (0,ios_base::end);
  3. size=f.tellg();
  4. f.seekg (0,ios_base::beg);
 

par contre, comment je peux faire passer un tableau d'une fonction à l'autre ?

Message cité 1 fois
Message édité par Terminapor le 08-11-2010 à 02:09:49

---------------
Perhaps you don't deserve to breathe
n°2034576
Joel F
Real men use unique_ptr
Posté le 08-11-2010 à 08:24:30  profilanswer
 

en le passant en paramètre :€
Qu'entends tu par tableau ? std::vector j'espere ?

n°2034588
theshockwa​ve
I work at a firm named Koslow
Posté le 08-11-2010 à 10:22:14  profilanswer
 

Terminapor a écrit :

Pas moyens via la librairie fstream ?
 
edit : c'est bon, voilà mon code :D
 

Code :
  1. //FILESIZE
  2. f.seekg (0,ios_base::end);
  3. size=f.tellg();
  4. f.seekg (0,ios_base::beg);


 
par contre, comment je peux faire passer un tableau d'une fonction à l'autre ?


 
pour une application 32 bits, ton code ne fonctionnera pas pour les fichiers de plus de 4Go, tu es donc conscient que ce que tu as écrit devrait être considéré comme faux ? :)


---------------
last.fm
n°2034623
Terminapor
I'll see you rise.
Posté le 08-11-2010 à 12:10:41  profilanswer
 

Joel F a écrit :

en le passant en paramètre :€
Qu'entends tu par tableau ? std::vector j'espere ?


un array tout con de cette forme : tab[x][y] :D
 
Donc j'suis sensé faire €montableau[x][y] ?
 
j'ai testé en faisant pointer sur ma fonction, le truc c'est qu'il faut que je l'exporte en double, et code::blocks me dit ça :
 
 error: invalid types `double[8][0u][double]' for array subscript :'(
 

theshockwave a écrit :


 
pour une application 32 bits, ton code ne fonctionnera pas pour les fichiers de plus de 4Go, tu es donc conscient que ce que tu as écrit devrait être considéré comme faux ? :)


Oui mais c'est pas grave (pour ma part), les fichiers qu'utilisera ma dll fera quoi... 8KB max ? jamais ça dépassera le giga :D


---------------
Perhaps you don't deserve to breathe
n°2034655
gilou
Modérateur
Modzilla
Posté le 08-11-2010 à 13:50:29  profilanswer
 

L'usage habituel, c'est fstat sous unix linux et son pote _fstat (et sa famille _fstat32, _fstat64, _fstati64, _fstat32i64, _fstat64i32) sous windows.  
Si tu ne veux que du code windows, tu as aussi _filelength, (et _filelengthi64) qui sont des versions directes de ce qu'on peut faire avec _fstat (et _fstati64)
A+,


Message édité par gilou le 08-11-2010 à 13:52:20

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2034706
xilebo
noone
Posté le 08-11-2010 à 15:22:10  profilanswer
 

Pour utiliser les fonctions standard en 64 bits, il faut ajouter cela à la compilation :  
 

Code :
  1. -D_FILE_OFFSET_BITS=64


 
si ce n'est pas mis, un fread (ou autre) échouera après 2GO.
 
Je ne sais pas si c'est nécessaire pour fstat.

n°2034756
Terminapor
I'll see you rise.
Posté le 08-11-2010 à 17:04:29  profilanswer
 

Ben comme je disais, ça dépassera jamais le giga le fichier que je "scan", donc la fonction que j'ai posté plus haut marche parfaitement :D

 

Maintenant, j'ai une tite question :D

 

Donc, je dois appeler ma DLL et lui dire de stocker toute les donnés d'un fichier définie dans un array 2D, no problem.
Maintenant, que se passera-t-il si j'appelle deux fois cette fonction avec deux fichiers différent ? ça ré-écrira sur mon ancien array, ou bien les pointeur de ces arrays seront différent :??:

 

Merci d'vot' aide :)


Message édité par Terminapor le 08-11-2010 à 17:07:20

---------------
Perhaps you don't deserve to breathe
n°2034763
xilebo
noone
Posté le 08-11-2010 à 17:27:46  profilanswer
 

cela dépend comment est déclaré ton tableau. Sans code, on ne pourra pas te dire grand chose.

mood
Publicité
Posté le 08-11-2010 à 17:27:46  profilanswer
 

n°2034764
Terminapor
I'll see you rise.
Posté le 08-11-2010 à 17:33:56  profilanswer
 

yes, voilà :  
 

Code :
  1. #include <iostream>
  2. #include <fstream>
  3. #include <string>
  4. #include <cstdio>
  5. using namespace std;
  6. char animationdata[8][0];
  7. DLL_EXPORT double animation_load()
  8. {
  9. // j'met dans le tableau mon bordel ambulant
  10. }
  11. DLL_EXPORT double animation_get(double _x, double _y)
  12. {
  13.     return(double) animationdata[_x][_y];
  14. }


 
Mais il me dit que la seul ligne de animation_get (second dll_export) est pas bonne  
"error: invalid types `char[8][0u][double]' for array subscript"
 
Que faire ? :(  
j'ai déjà essayé de changer mon tableau en double ou quoi, mais ça n'y change rien


---------------
Perhaps you don't deserve to breathe
n°2034765
xilebo
noone
Posté le 08-11-2010 à 17:35:36  profilanswer
 

ton tableau est déclaré en variable globale, chaque appel en écriture sur celui-ci écrasera les valeurs précédentes.

n°2034767
Terminapor
I'll see you rise.
Posté le 08-11-2010 à 17:36:35  profilanswer
 

ouais donc faut le mettre dans la fonction animation_load() c'est ça ?

 

Et pour le problème de la dernière ligne ?

 

edit : bon, j'l'ai faite marché finalement, mais quand j'assigne des valeurs à mon tableau......... ça marche paaaass :(

 

f.read((char*) &absdata, 2);
 int pos = absdata*sign;
 animationdata[0][frame] = absdata*sign;

 

vlah le code, frame est à 0, sign à -1, halp !


Message édité par Terminapor le 08-11-2010 à 22:04:12

---------------
Perhaps you don't deserve to breathe

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [C++] Récupérer la taille d'un fichier binaire

 

Sujets relatifs
Recherche texte + modification dans un fichiermodifier taille de page web afin qu'elle s'adapte au navigateur
structure en C++[C] Structure de données à utiliser pour le parcours de dossier
Récuperer objet dans tableau en fonction du champ d'un objet[C] Récuper l'utilisateur à partir de l'uid
[flash] récupérer des vidéos[VBA] extraire des noeuds d'un gros fichier XML
[C#] Erreur lors de l'ouverture d'un fichier 
Plus de sujets relatifs à : [C++] Récupérer la taille d'un fichier binaire


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR