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 :

fstream et fichier de plus de 2GB


Sujet :

C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2002
    Messages : 32
    Points : 20
    Points
    20
    Par défaut fstream et fichier de plus de 2GB
    Bonjour,

    J'ai un programme utilisant les outils d'ecriture de la classe fstream pour ecrire non sequentiellement des resultats dans un fichier. Si la somme d'informations depasse 2Gb, le fichier est tronqué car l'offset dans seekp() est un entier 32bits. Peux t on tout de meme gerer l'ecriture dans des fichiers de plus de 2Gb avec la classe fstream?
    J'ai vaguement entendu parler de SetFilePointerEx(): mais est ce que cette fonctionalité peut s'utiliser en combinaison avec les methodes seekp() et write() de la classe fstream?

    Merci,

    Gael.

  2. #2
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Si tu utilises les fonctions de l'API Win32, il faut le faire jusqu'au bout... SetFilePointerEx réclame un HANDLE sur le fichier, et ce n'est bien sûr pas portable pour un sou : il te faudrait donc abandonner les flux, ou limiter tes fichiers à moins de deux gigas.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2002
    Messages : 32
    Points : 20
    Points
    20
    Par défaut
    J'en conclus qu'il sera difficile de porter une lecture sur fichier de plus de 2Gb avec la classe fstream?

    J'ai finalement opté pour une "lecture / ecriture / positionnement dans fichier" avec les routines du C:
    _write() (sous windows)
    fwrite() (sous linux)
    _read() (sous windows)
    fread() (sous linux)
    _lseeki64 (sous windows)
    fseeko (sous linux)

    Ce post peut donc etre fermé.

    Merci,

    Gael.

  4. #4
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Citation Envoyé par couturier Voir le message
    J'en conclus qu'il sera difficile de porter une lecture sur fichier de plus de 2Gb avec la classe fstream?
    Oui et non : si tu en fais une nouvelle version adaptée à ces limites, via un char_traits spécifique, ça devrait passer.
    Mais pour faire ce char_traits adapté aux positions de fichier sur 64 bits, de toutes façons, tu vas devoir faire de la compilation conditionnelle Windows / Linux, et utiliser les fonctions que tu as cité dans ton message précédent justement.

    Reste à savoir le volume de code impacté : si c'est pour un nouveau développement, c'est peut-être un peu lourd à faire pour pas grand-chose. S'il y a des milliers de lignes utilisant un fstream à modifier, par contre, ce n'est plus du tout la même chose et modifier le char_traits sera bien plus efficace et rapide.

    Citation Envoyé par couturier Voir le message
    Ce post peut donc etre fermé.
    Les posts donnant la solution à un problème sont rarement fermés ici, par contre tu as un bouton qui permet de l'indiquer.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Importation des fichiers les plus recents
    Par avantoux dans le forum VBA Access
    Réponses: 8
    Dernier message: 28/09/2007, 13h50
  2. Réponses: 2
    Dernier message: 12/03/2006, 23h41
  3. [ZIP] zipper des fichiers de plus d'un mega
    Par sylviefrfr dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 26/10/2005, 14h40
  4. Réponses: 3
    Dernier message: 02/09/2004, 11h26
  5. TFileStream et les fichiers de plus de 2Go
    Par naikon dans le forum C++Builder
    Réponses: 3
    Dernier message: 29/06/2004, 16h11

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