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 :

Stocker une taille


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 74
    Par défaut Stocker une taille
    Bonjour,

    La fonction ftell qui permet de stocker l'offset du curseur peut être utilisé pour récupérer la taille d'un fichier. J'aimerai savoir comment peut-on récupérer cette taille si elle est de l'ordre du go? La fonction ftell renvoie elle même un long donc pas assez pour donner l'offset de gros fichier. Je sais qu'il existe la fonction FileAttributesEx des api windows mais j'aimerai le faire de manière portable.

    Ma deuxième question concerne telldir, celle-ci renvoie off_t octets. Mais dans quelle genre de variable stocker ce résultat lorsqu'il dépasse un int ou un long ? (Plusieurs Go)

  2. #2
    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
    Salut,

    Il a une version 64 bits des fonctions que tu evoques permettant de lire des fichier de plus de 4Go
    - ftello64
    - fopen64
    - fseeko64

    Pour les utiliser sur un systeme 32 bits if faut definir les variables suivantes

    _LARGEFILE64_SOURCE
    __USE_FILE_OFFSET64
    #define _FILE_OFFSET_BITS 64

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 74
    Par défaut
    Bonjour,

    Ces fonctions ne sont pas référencés dans le man que ce soit sur linux ou sur le net. Est-ce normal ? Et est-ce qu'elles sont standards pour les systêmes 32bits?

    Ensuite je connaissais le #define _FILE_OFFSET_BITS 64 qui me permettait d'ouvrir de gros fichiers avec fopen. Mais je ne vois pas comment définir les variables dont tu parles. Est-ce que tu peux me donner un exemple ?

    Ensuite, ma question initiale c'était dans quel type de variables stocker le nombre renvoyé par les fonctions quand la taille fait plusieurs go donc, est supérieure à ce que peut stocker un int ?

  4. #4
    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
    Oui j'avais compris ta demande, mais pour stocker des variable superieur à 2Go il faut déjà etre en mesure de les obtenir. Et les la fonction ftell classique, par example, ne permet pas d'obtenir de telles valeurs. D'ou l'utlisation de fonction étendues au 64bits.
    Maintenant pour stocker des entiers > 2Go tu as plusieurs solutions équivalentes.
    - long long in
    - off64_t

    Pour la directive "#define _FILE_OFFSET_BITS 64", je pense qu"elle seule suffit dailleurs, il suffit de la mettre au debut de ton fichier cpp ou mieux de ton fichier d'include. Elle est nécessaire si tu compiles 32 bits, sinon pas besoin de l'inclure je pense.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 74
    Par défaut
    Ah oui je comprends. Cependant je ne trouve aucun prototype de ces fonctions. Sais-tu où je pourrai les trouver ?

    Est-ce qu'elles s'utilisent de la même manière que les versions 32 bits ?
    Car gcc me renvoie :assigment makes pointer from integrer without a cast

    et apparament ça concerne la ligne de mon fopen :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fichier = fopen64("image.iso", "rb");

  6. #6
    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
    De mémoire je crois qu'il ne faut pas etre en 'ansi strict', parce qu'il n'y a pas de prototype, quelquechose comme ca.
    Sinon tu fais un google sur fopen64 et tu auras des tas d'example.

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

Discussions similaires

  1. Stocker une chaîne de taille réduite
    Par rambc dans le forum Général Python
    Réponses: 3
    Dernier message: 09/06/2009, 22h01
  2. [Socket][Byte] Probleme d'envoi d'une taille de fichier
    Par Erok dans le forum Entrée/Sortie
    Réponses: 14
    Dernier message: 12/05/2009, 17h38
  3. [MySQL] Quel est le meilleur moyen de stocker une date/heure ?
    Par MiJack dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 31/07/2004, 12h19
  4. [JTextFiled]Mettre une taille max à la saisie
    Par mush_H dans le forum Composants
    Réponses: 13
    Dernier message: 29/07/2004, 11h22
  5. Imposer une taille à un composant en conception
    Par teryen dans le forum Composants VCL
    Réponses: 14
    Dernier message: 28/06/2004, 15h06

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