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 :

Écriture simultanée dans plusieurs fichiers


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    138
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Maroc

    Informations forums :
    Inscription : Mai 2007
    Messages : 138
    Par défaut Écriture simultanée dans plusieurs fichiers
    Bonjour tout le monde.
    Je suis en train de développer une application en C++, et cette application va devoir me sortir comme résultat 3 fichiers plats (TXT):
    - Le premier sera pour le résultat du traitement de mon programme
    - Le deuxième pour les statistiques
    - Le troisième pour le log des erreurs.
    Ma question est la suivante:
    Est ce que je peux, en toute sécurité, écrire simultanément dans ces trois fichiers? C'est à dire, est ce que je peux, au début de mon programme, localiser mes trois fichiers, les ouvrir en création, et écrire à chaque fois qu'il y a besoin, l'information nécessaire dans le fichier adéquat?
    J'ai demandé à droite à gauche, on m'a dit que non, mais ce qui me casse la tête, c'est surtout si la quantité de données que j'aurai à traiter serait trop grande? et aussi si le programme ne trouvera pas de problème à se localiser dans l'un des fichiers à ma demande ?

    Une solution qu'on m'a proposé: Créer mes fichiers au début du programme, ne les ouvrir en mode modification qu'en cas de besoin, et les refermer après chaque utilisation.
    Est ce que ça n'a pas d'impact sur le temps de traitement? Sachant que la volumétrie de mes données risque d'être trop grande? D'où l'ouverture et la fermeture de mes fichiers serait une tâche à faire et à refaire ?


    Merci d'avance pour vos réponse.

  2. #2
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Il n'y a aucun problème pour conserver les 3 fichiers ouverts en même temps et à écrire dedans au fur et à mesure.

  3. #3
    Membre Expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Par défaut
    Oui, la seule condition c'est qu'il n'y ait pas d'accès concurrentiels (en écriture seulement?). C'est la base pour tout ce qui est "parrallèlisme".

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    138
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Maroc

    Informations forums :
    Inscription : Mai 2007
    Messages : 138
    Par défaut Re: [C++] Ecriture simultanée dans plusieurs fichiers
    Oui, la seule condition c'est qu'il n'y ait pas d'accès concurrentiels (en écriture seulement?). C'est la base pour tout ce qui est "parrallèlisme".
    J'ai pas bien saisi ce que tu veux dire par " Accès Concurrentiels " ?

    Pour mes fichiers, je compte les ouvrir tout les trois au début de mon programme en mode création, leurs attribuer un fileName.
    Puis, et au fur et à mesure de mon besoin, j'écrirai dans le fichier adéquat l'information souhaité.
    Ce n'est qu'à la fin de mon programme que je vais fermer mes trois fichiers.

    Merci pour vos réponse, et encore merci pour ton retour Klaim

  5. #5
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Je dirai comme Mathieu, aucun problème.
    Un problème arriverai par contre si tu écrivais dans un même fichier depuis 2 threads différents. Mais ça n'a pas l'air d'être ton cas.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Sauf la capacité de la machine, il n'y a pas de limite au nombre de fichiers ouverts, en écriture et/ou en lecture. A condition, naturellement, que le même fichier ne soit pas ouvert plus d'une fois en même temps.
    Il y a 2 fonctions qui permettent le contrôle d'état d'un fichier, access() et fstat(), mais leur portabilité n'est pas garantie.
    Sous DOS, le nombre de fichiers ouverts en même temps était limité. Pour des applications compliquées, cela pouvait devenir pénalisant.

    La quantité de données à écrire est une notion indépendante du nombre de fichier ouverts.
    Il ne faut pas fermer un fichier pour une raison autre que celle de ne plus en avoir besoin.
    Enfin, n'oubliez pas qu'il y a différents modes d'ouverture des fichiers.
    Bon développement.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    138
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Maroc

    Informations forums :
    Inscription : Mai 2007
    Messages : 138
    Par défaut Re: [C++] Ecriture simultanée dans plusieurs fichiers


    Super les gars. Voilà pourquoi j'aime ce forum.

    Merci beaucoup encore une fois.

  8. #8
    Membre Expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Par défaut
    Citation Envoyé par Imad_ing Voir le message
    3 fichiers plats
    Merci à toi, je ne connaissais pas l'expression

  9. #9
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Pardon pour cette petite remarque :
    Un fichier est une suite de bits. On peut grouper ces bits en octets, et c'est ce qu'on fait généralement.
    Un octet correspond à un caractère, pas forcément alphabétique ou numérique (en gros entre 33 et 128 plus éventuellement des caractères accentués, si on connait la table de code).
    Qu'est-ce qui distingue un fichier TXT d'un fichier binaire ? réponse l'interprétation des 32 premiers caractères (au moins de certains des 32 caractères et en particulier Fin de Ligne et Retour Charriot : CRLF 0x0D et 0x0A)
    Alors la différence d'écriture entre un fichier TXT et un fichier binaire (par exemple un raster ou un .EXE) ne réside que dans le choix d'interprétation de ces caractères de contrôle.

    Ceci m'a été provoqué par la très jolie dénomination de fichier "plat" pour un fichier TXT. Appelle-t-on "creux" un fichier binaire?
    Cordialement

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    138
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Maroc

    Informations forums :
    Inscription : Mai 2007
    Messages : 138
    Par défaut Re: [C++] Ecriture simultanée dans plusieurs fichiers
    Mr Pierre Dolez,
    Appelle-t-on "creux" un fichier binaire?
    Vous auriez du faire cette remarque dès le début de votre intervention pour m'aider à mieux m'exprimer. Mais merci comme même parce que moi au fait, je connaissais pas cette nomination, et je n'ai fait qu'apprendre le terme à travers les gens Métiers (Mes Clients)! Merci encore

    Mr jblecanard
    Merci à toi, je ne connaissais pas l'expression
    Mais de rien! Régales toi mon frère

    Mais aujourd'hui, j'ai un autre problème, est c'est pour cela que je vais réouvrir cette discussion: Après avoir parsé mes fichiers XML avec TinyXML, je constitue des lignes dans une chaine de caractères, et chaque ligne est constitué de concaténation de plusieurs données en provenance de plusieurs balises.
    Le problème est que lorsque je copie cette chaine de caractère dans mon fichier PLAT de sortie , j'obtient dans mon fichier des caractères genre
    Forfait Maitrisé
    au lieu d'avoir
    Forfait Maitrisé
    .
    J'ai cherché sur internet, et j'ai trouvé que TinyXML supporte l'UTF8, et la méthode que j'utilise pour copier ma chaine de caractères dans le fichier est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonFichier >> MaLigne  >> endl
    de la classe ofStream qui dérive de std::ios_base.
    Donc ma question est: Quel type de sortie nous offre ofStream ? et y'a t'il une autre méthode pour garder mes caractères tel qu'elles sont sur le fichier XML?

    Merci d'avance pour vos réponse.

    Cordialement

  11. #11
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Ce type de problème ne date pas d'hier.
    La table de caractère comporte 256 cases (de 0 à 255). Les 32 premiers son reservés. Les caractères 33 à 127 sont normalisés.
    Par contre, les caractères 128 à 255 sont différents d'un table à l'autre.
    Je ne vous donnerai pas la solution, parce qu'à mon avis, elle dépend de pas mal de choses que j'ignore.
    Pour que je comprenne mieux il me faudrait plus de détails, par exemple, la chaine que vous appelez "LaLigne" et que vous écrivez, d'où vient-elle ?
    Si je craignais les foudres des C++istes, j'arrêterais là.

    Essayer de faire une ouverture de fichier "Standard" et une écriture "Standard". On obtiendra certainement la même chose, mais un petit essai ne coûte rien.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    FILE *ecr = fopen("Fichier_essai.txt","wt");
    if (ecr)
    {
       ...  // création de MaLigne
       fprintf(ecr,"%s\n",MaLigne);
       ... // suite
       fclose(ecr);
    }
    Cordialement.

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    138
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Maroc

    Informations forums :
    Inscription : Mai 2007
    Messages : 138
    Par défaut Re: [C++] Ecriture simultanée dans plusieurs fichiers
    Merci tout d'abord pour ta réponse rapide.

    Au fait, le but de mon programme est de transformer un fichier XML en un fichier txt. Ce fichier txt a bien une structure à respecter: (L'ordre des information dans chaque ligne commençant par un code spécifique.) Car dans le programme qui va prendre mon fichier txt, lui il lit les informations depuis une position donnée, et sur un nombre défini de caractères.

    Voilà un exemple de ligne du fichier txt de sortie que je dois avoir:
    MAR100003 FR0300 0101190001011900000000173058
    Donc, pour écrire ces données dans la ligne, je dois chercher chaque info à part, vu qu'elles ne se trouvent pas dans le même bloc de mon fichier xml, et les concaténer dans une variable string, et ce pour pouvoir construire ma ligne.

    Une fois ma ligne est construite, je la copie dans le fichier txt et j'effectue un retour chariot.

    Voilà un exemple de bloc xml d'ou proviennent mes données:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <ligneResumeClient categorie="" codeItem="MensCo" idBloc="0300">
    				<dateDebut>2010-06-01</dateDebut>
    				<dateFin>2010-06-29</dateFin>
    				<montantHT>432.39</montantHT>
    			</ligneResumeClient>
    Donc, si vous remarquez bien, dans ce bloc xml, j'ai le code ma ligne qui est
    idBloc="0300"
    , mais pas toutes les informations qui constituent ma ligne ne se trouve dans ce bloc. ( Il y a d'autres informations en provenance d'autres balises ou d'autres blocs )

    Quand je visualise mon fichier, je trouve que les données qui contiennent les caractères accentués sont affichés différemment.

    J'espère que ça t'aidera à m'aider

    Et merci encore pour tes réponses et tes clarifications.


    Cordialement

Discussions similaires

  1. Somme des éléments dans plusieurs fichiers.
    Par AjJi dans le forum Linux
    Réponses: 2
    Dernier message: 11/06/2006, 00h51
  2. ecrire dans plusieur fichier
    Par Rocket2005 dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 11/01/2006, 21h19
  3. Ecriture simultanée dans un fichier
    Par doudou34 dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 30/09/2005, 14h26
  4. écritures concurrentes dans un fichier
    Par djmalo dans le forum C
    Réponses: 9
    Dernier message: 06/03/2005, 01h45

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