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 :

Définir la taille d'un fichier avec std::fstream.


Sujet :

C++

  1. #1
    Membre confirmé
    Avatar de Kalite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 310
    Points : 553
    Points
    553
    Par défaut Définir la taille d'un fichier avec std::fstream.
    Bonjour,

    J'ai un fichier de log dont je veut volontaire limiter la taille.
    Une foi la taille maximal atteinte je doit faire de la place en supprimant les lignes les plus anciennes.

    Donc sa me donne un truck du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Recherche de la premier ligne qui n'est pas à supprimer.
    Tant qu'il y a des lignes:
            Déplacement de la ligne vers le début du fichier.
    Supprimer la fin du fichier.
    Bon mon problème c'est de supprimer la fin du fichier. J'utilise un fstream mais je ne voi pas comment on modifie la taille du fichier.

  2. #2
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 426
    Points : 827
    Points
    827
    Par défaut
    Salut,

    Tu pourrais copier toutes les lignes de ton fichier log dans un vector<string>, faire ton traitement sur le vector ( supprimer ce que tu veux supprimer ), puis écraser ton fichier en en créant un nouveau avec le contenu du vector.

  3. #3
    Membre confirmé
    Avatar de Kalite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 310
    Points : 553
    Points
    553
    Par défaut
    Le problème c'est que je suis en embarqué et que je n'ai que 14Mo de mémoire.

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2010
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2010
    Messages : 254
    Points : 538
    Points
    538
    Par défaut
    a priori la taille d'un fichier est calculée par rapport à la quantité de données qu'il contient donc si tu supprime du contenu, que ce soit au début, au milieu ou à la fin, la taille du fichier sera ajustée toute seule.
    "L'insanité consiste à répéter la même action dans l'espoir d'aboutir à un résultat différent" Albert Einstein
    ----------------------
    T.O.A.O 6-MarViN

  5. #5
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Salut,

    fstream, 14Mo et embarqué, pour moi il y a un mot de trop (et ce n'est pas fstream ou 14Mo)

    Plus sérieusement, si chaque ligne de log est fixe, une solution est de créer un fichier de taille max avec des lignes invalides, puis de remplir au fur et à mesure à l'instar d'un buffer circulaire s'appuyant sur un tableau de taille fixe.

    En tout cas, avec les flux, je ne vois pas de façon trivial de contrôler la taille max de ton fichier.

  6. #6
    Membre confirmé
    Avatar de Kalite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 310
    Points : 553
    Points
    553
    Par défaut
    J'ai trouver un moyen en utilisant les fonction truncate() ou ftruncate().

    Peut-on récupérer le File descriptor utilisé par fstream ?

  7. #7
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Salut,

    Citation Envoyé par Kalite Voir le message
    J'ai trouver un moyen en utilisant les fonction truncate() ou ftruncate().
    truncate et ftruncate ne sont pas des fonctions standards (monde linux).

    Citation Envoyé par Kalite Voir le message
    Peut-on récupérer le File descriptor utilisé par fstream ?
    Ben, les fstream sont conçus pour masquer ces détails d'implémentation. Cependant, j'ai cru comprendre que Gnu avait une extension à la norme pour retrouver le file descriptor (fd dans un filebuffer ?).

  8. #8
    Membre confirmé
    Avatar de Kalite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 310
    Points : 553
    Points
    553
    Par défaut
    Citation Envoyé par 3DArchi Voir le message
    truncate et ftruncate ne sont pas des fonctions standards (monde linux).
    Ça je le savait mais merci pour les autres de le préciser. Il des fonctions équivalentes pour Windows mais je ne me souvient plus de leur nom.

    Merci pour ton aide. Je vais donc fermer le fichier une foi la copie effectuée et je ferait un truncate(). Je pourrait le rouvrir juste après.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 14/05/2014, 09h58
  2. Taille maximum de fichier avec gnuTAR?
    Par flyingman dans le forum Administration système
    Réponses: 12
    Dernier message: 01/10/2012, 08h35
  3. Problème de lecture fichier avec std::getline
    Par marcootz dans le forum C++Builder
    Réponses: 13
    Dernier message: 15/05/2008, 15h42
  4. [VB6] [Réseau] Récupérer la taille d'un fichier avec inet
    Par pcpunch dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 20/02/2003, 21h38

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