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 :

gestion de gros fichiers en C++


Sujet :

C++

  1. #1
    Membre éclairé
    Avatar de buzzkaido
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2004
    Messages
    821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2004
    Messages : 821
    Points : 734
    Points
    734
    Par défaut gestion de gros fichiers en C++
    Bonjour,

    Pour les besoins d'un projet je dois écrire et lire dans des fichiers pesant entre 20Go et 100Go (oui oui, des gros fichiers)

    Le format de fichier fait que je ne doit lire que des petits blocs contigus (quelques mégaoctets) et que je sais calculer à l'avance l'adresse de début d'un bloc qui m'intéresse.

    Mon problème est que cela doit aussi fonctionner sur des systèmes 32bits... du coup le "seekg" pour déplacer le pointeur de lecture du fichier ne peut pas prendre en paramètre un déplacement de plus de 4Go...

    Comment faire cela de façon efficace ? Si je doit déplacer le pointeur de lecture de 12Go, je fais 3 déplacement successif de 4Go ?

    Comment ce type de problème est géré par des softs type VLC qui savent se déplacer dans des fichiers de plus de 4Go sur des systèmes 32bits ?

    Merci

  2. #2
    Membre éclairé
    Inscrit en
    Décembre 2010
    Messages
    290
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 290
    Points : 719
    Points
    719
    Par défaut
    à première vue, il existe une fonction lseek64() sous Linux.
    Je ne l'ai jamais utilisée, mais je pense que ça fait l'affaire. Je ne pense pas que ce soit limité aux systèmes 64 bits, parce qu'il n'y a aucune raison que ça le soit.

  3. #3
    Membre éclairé
    Avatar de buzzkaido
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2004
    Messages
    821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2004
    Messages : 821
    Points : 734
    Points
    734
    Par défaut
    Ah oui, bien vu... sauf que je suis sous windows...

    Une idée sur l'equivalent windows de cette fonction ?

  4. #4
    Membre habitué
    Homme Profil pro
    Développeur Junior
    Inscrit en
    Septembre 2011
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Septembre 2011
    Messages : 170
    Points : 177
    Points
    177
    Par défaut
    "On Windows, use _lseeki64(), on Linux, lseek64()"

    Je n'ai pas testé, j’espère que cela peut vous aider

  5. #5
    Membre éclairé
    Avatar de buzzkaido
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2004
    Messages
    821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2004
    Messages : 821
    Points : 734
    Points
    734
    Par défaut
    J'ai trouvé ça :

    http://stackoverflow.com/questions/1...eking-position

    Le dernier message me plait bien... quelqu'un a déjà testé ?

  6. #6
    Membre habitué
    Homme Profil pro
    Développeur Junior
    Inscrit en
    Septembre 2011
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Septembre 2011
    Messages : 170
    Points : 177
    Points
    177
    Par défaut
    cf mon comment .. ^^

    Je n'ai jamais testé personnellement, désolé

    _lseek returns the offset, in bytes, of the new position from the beginning of the file. _lseeki64 returns the offset in a 64-bit integer

  7. #7
    Membre éprouvé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Points : 937
    Points
    937
    Par défaut
    Dans <io.h> il y a ceci:
    __int64 __cdecl _lseeki64(int _FileHandle, __int64 _Offset, int _Origin);
    __int64 __cdecl _telli64(int _FileHandle);

    Sinon, l'api SetFilePointerEx().

    Et ça fonctionne très bien

Discussions similaires

  1. [Python 2.X] gestion de gros fichier
    Par vincenlnx dans le forum Général Python
    Réponses: 10
    Dernier message: 22/11/2014, 15h42
  2. Réponses: 26
    Dernier message: 30/09/2014, 16h57
  3. Gestion de gros fichiers
    Par bpy1401 dans le forum Android
    Réponses: 10
    Dernier message: 03/07/2012, 13h40
  4. Gestion des (gros) fichiers
    Par schneed dans le forum C++Builder
    Réponses: 1
    Dernier message: 23/02/2009, 20h05
  5. [Composants texte] Gestion de gros fichiers
    Par sozie9372 dans le forum Interfaces Graphiques en Java
    Réponses: 8
    Dernier message: 22/05/2006, 11h03

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