IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Fichier binaire supérieur à 2GB


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut Fichier binaire supérieur à 2GB
    Bonjour,

    J'utilise actuellement les library "stdio.h" , fseek, fopen... pour gerer un fichier binaire sous winxp64. Malheureusement, mon fichier fait parfois plus de 2GB et alors toutes ces fonctions plante lamentablement.

    Comment faire, ou quelle library utiliser pour ecrire et lire des fichier > 2 GB

    merci d'avance

  2. #2
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    L'API système (Platform SDK) directement.... ou alors sous MSVC++ la stdlib propose des versions "correctes" des fonctions de file-management (avec notamment des unsigned __int64 pour les tailles) si je me souviens bien.
    Comme d'ailleurs pour la plupart des fonctions (gestion des chaines, ...).

  3. #3
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut
    Ok, mais moi je voudrais quelque chose de portable, du C++

  4. #4
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Vu le message originel, il était pas évident que ce soit pour être portable (winxp64), ni forcément C++ (stdlib).

    Tu trouveras alors peut-être ton bonheur dans 'boost'.

    La stdlib est si vieille (si sure , et si souvent mise à jour ) que c'est plus une plaie à utiliser qu'autre chose. Mais c'est un avis que je partage avec moi-même

  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Sous Win64, les size_t sont supposés faire 64 bits, après il faut s'assurer que les fonctions d'accès aux fichiers suivent.
    Si ça ne suit pas, tu sera réduit à utiliser l'API système...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    La stdlib est si vieille (si sure , et si souvent mise à jour ) que c'est plus une plaie à utiliser qu'autre chose. Mais c'est un avis que je partage avec moi-même
    Tu parles de quoi là ?

  7. #7
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 528
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 528
    Par défaut
    Citation Envoyé par uriotcea
    Bonjour,

    J'utilise actuellement les library "stdio.h" , fseek, fopen... pour gerer un fichier binaire sous winxp64. Malheureusement, mon fichier fait parfois plus de 2GB et alors toutes ces fonctions plante lamentablement.

    Comment faire, ou quelle library utiliser pour ecrire et lire des fichier > 2 GB

    merci d'avance
    Il faut impérativement utiliser des API systemes comme le dit Nicroman.
    Jouer sur la pagination de la mémoire.
    Oublies carrément la portabilité , la gestion mémoire c'est bcp trop spécifique à l'OS.
    Si tu veux faire qque chose de portable tu ne peux pas optimiser...
    je ne sais pas ce que c'est que cette mode de vouloir faire portable à tout prix.

  8. #8
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    N'importe quoi Mat.M.

    La seule chose qui empêche ici de manipuler les fichiers de plus de 2 Gio avec la bibliothèque standard c'est qu'elle n'est pas implémentée correctement.

    Il n'y aucunement besoin de passer par des éléments spécifiques au système d'exploitation.
    Je sais pas ce que c'est que cette mode de se rajouter des dépendances et de se limiter à des systèmes spécifiques quand on peut travailler avec une abstraction portable...

    Si tu veux faire qque chose de portable tu ne peux pas optimiser...
    Il faudrait pas exagérer non plus.

  9. #9
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 528
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 528
    Par défaut
    Citation Envoyé par loufoque
    N'importe quoi Mat.M.

    La seule chose qui empêche ici de manipuler les fichiers de plus de 2 Gio avec la bibliothèque standard c'est qu'elle n'est pas implémentée correctement.

    Il n'y aucunement besoin de passer par des éléments spécifiques au système d'exploitation.
    Je sais pas ce que c'est que cette mode de se rajouter des dépendances et de se limiter à des systèmes spécifiques quand on peut travailler avec une abstraction portable...


    Il faudrait pas exagérer non plus.
    d'accord alors il fait ce qu'il veut s'il a raison et on en reparle quelques temps après...puisque je raconte n'importe quoi ..
    je ne parle pas de rajouter des dépendances ou quoique ce soit simplement avec les fonctionnalités "standards" cela ne peut fonctionner dans certains cas...
    Uriotcea si tu programmes sous Windows je te conseille vivement de consulter le MSDN mieux si tu le trouves le livre de Jeffrey Richter "Inside Win Nt" je crois qui parle de la gestion de la mémoire,threads et fichiers.
    Enfin tu fais ce que tu veux vu que je dis n'importe quoi...
    après tout si ton projet pédale ce ne sera pas de ma faute.. et qu'il y a des gens qui ne jurent que par la portabilité

  10. #10
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Entre l'un et l'autre il y a un juste milieu... et la gestion des fichiers est le truc implémenté en premier par les librairies de portabilité comme boost. Un peu comme la gestion des chaînes de caractères (oui std::string c'est très bien) et des charsets, des threads, de la mémoire, et de plein d'autres choses tellement spécifique à l'OS, qu'il n'y a aucune spécification C, ou C++.

    Des langages plus récents comme Java, et C# intègrent parfaitement ces éléments.

    La libraire C standard est ce qu'elle est, et certaines fonctions (simplement par leur déclaration) ont du mal sur les machines récentes...comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    long int ftell ( FILE * stream );
    C'est d'ailleurs, si mes souvenirs sont bon, la seule fonction de stdio qu'on ne puisse pas vraiment utiliser. Mais c'est quand même rare quand on en a besoin.

    Si tu nous disais exactement ce qui foire, on pourrait peut-être dire comment faire...

  11. #11
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut
    Ok OK, la seule chose que je demande c'est comment me déplacer dans un fichier de plus de 2GO. Autrement dire qui remplace fseek(...). qui n'accepte que des entrées limitées à 32Bits

Discussions similaires

  1. Upload fichier supérieur à 2Gb
    Par LostRailler dans le forum Langage
    Réponses: 6
    Dernier message: 20/11/2009, 19h48
  2. fichier binaire > 2GB
    Par uriotcea dans le forum C
    Réponses: 0
    Dernier message: 17/03/2009, 18h48
  3. [Debutant] Comment lire la taille d'un fichier binaire ?
    Par Invité dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 18/12/2003, 19h20
  4. communication fichier binaire fichier txt
    Par micdie dans le forum C
    Réponses: 3
    Dernier message: 05/12/2002, 00h19
  5. fichier binaire ou texte
    Par soussou dans le forum C++Builder
    Réponses: 4
    Dernier message: 14/06/2002, 13h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo