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 :

lecture et ecriture simultan�es dans un fichier en c++


Sujet :

C++

  1. #1
    Membre averti
    Homme Profil pro
    Architecte mat�riel
    Inscrit en
    Juin 2015
    Messages
    31
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (�le de France)

    Informations professionnelles :
    Activit� : Architecte mat�riel

    Informations forums :
    Inscription : Juin 2015
    Messages : 31
    Par d�faut lecture et ecriture simultan�es dans un fichier en c++
    Bonjour,
    J'aimerais comprendre pourquoi mon code ne marche pas :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    fstream fichier(nomfichier.c_str(), ios::in | ios::out | ios::ate);
    	if(fichier)  
    	{
    		fichier.seekg(ios_base::beg);
    		fichier.seekp(ios_base::beg);
    		fichier << "test";      // ne marche pas
    		fichier.write ("test",4*sizeof(char));     //ne marche pas non plus :(((
                  }

  2. #2
    Expert �minent

    Femme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par d�faut
    Que signifie "ne marche pas"?
    Quel est le symptome?

  3. #3
    Membre averti
    Homme Profil pro
    Architecte mat�riel
    Inscrit en
    Juin 2015
    Messages
    31
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (�le de France)

    Informations professionnelles :
    Activit� : Architecte mat�riel

    Informations forums :
    Inscription : Juin 2015
    Messages : 31
    Par d�faut
    �a n'�crit pas dans le fichier

  4. #4
    Expert �minent

    Femme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par d�faut
    ajoute un else coin coin:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    fstream fichier(nomfichier.c_str(), ios::in | ios::out | ios::ate);
    if(fichier)  {
    	fichier.seekg(ios_base::beg);
    	fichier.seekp(ios_base::beg);
    	fichier << "test";      // ne marche pas
    	fichier.write ("test",4*sizeof(char));     //ne marche pas non plus :(((
    } else {
    	cout << "coin coin" << endl;
    }
    A priori, le fichier n'a pas pu �tre ouvert.
    Peut �tre parce que le chemin sp�cifi� n'est pas valide, ou encore parce que l'utilisateur n'as pas le droit d'y �crire.

  5. #5
    Membre averti
    Homme Profil pro
    Architecte mat�riel
    Inscrit en
    Juin 2015
    Messages
    31
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (�le de France)

    Informations professionnelles :
    Activit� : Architecte mat�riel

    Informations forums :
    Inscription : Juin 2015
    Messages : 31
    Par d�faut
    non il s'ouvre bien, du coup j'ai abandonn� l'id�e de modifier un fichier directement (bien trop casse ... bonbon), je cr�e un flux pour la lecture et je cr�e un flux pour l'�criture dans un nouveau fichier.

  6. #6
    Membre habitu�
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    11
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 11
    Par d�faut
    Salut , j'ai pas trop compris ce que tu cherchais � faire . J'imagine que tu veux lire et �crire dans un fichier avec le m�me flux car le code que tu met en exemple effectue simplement deux �critures de fa�on diff�rentes.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    	fstream fichier("greg.txt", ios::in | ios::out | ios::ate);
    	string line; 
     
    	if(fichier)  {
    		fichier << "test"; 
    		fichier << "LOLZ"; 
    		fichier.seekg(ios_base::beg);
    		getline(fichier , line);
    		cout << line << endl;
    	}
    Ca marche chez moi , je veux dire que j'�cris d'abord deux mots � la suite dans mon fichier puis je d�place mon curseur au d�but du fichier puis je lis la premi�re ligne donc j'obtiens en sortie "testLOLZ" . Il y a une condition pour que ce code fonctionne ,c'est qu'il faut que le fichier greg.txt soit cr�e avant.

  7. #7
    Membre tr�s actif
    Homme Profil pro
    �tudiant
    Inscrit en
    Mars 2014
    Messages
    183
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 25
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 183
    Par d�faut
    �a doit surement �tre pour faire un genre de convertisseur ou un "trouver et remplacer" non ?

  8. #8
    Expert �minent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activit� : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par d�faut
    Salut,

    De mani�re g�n�rale, c'est toujours une tr�s mauvaise id�e de vouloir effectuer une lecture et une �criture "simultan�e" dans un m�me fichier. La raison est bien simple : il faut avoir la certitude que les donn�es d'origines (celles qu'on lit dans le fichier) et les donn�es modifi�es (celles que l'on �crit dans le fichier) auront exactement la m�me taille.

    Car, de deux choses l'une : si l'on �crit des donn�es dont la taille est sup�rieure � celles des donn�es d'origine, on va syst�matiquement en arriver � "�craser" les donn�es suivantes, rendant de ce fait le fichier inutilisable. Par contre, si on �crit des donn�es dont la taille est inf�rieure � celle des donn�es d'origine, on va syst�matiquement en arriver � "laisser des crasses" correspondant � la partie "non modifi�e" de la donn�e d'origine, ce qui aura exactement le m�me effet : rendre le fichier inutilisable.

    De probl�mes est d'autant plus pr�sent avec les fichier dont on dit qu'il s'agit de "fichier texte" (quel que soit leur format interne), car il suffit de multiplier (ou de diviser) une valeur par dix pour que, manque de bol, la valeur modifi�e n�cessite un caract�re de plus (ou de moins) pour �tre repr�sent�e dans le fichier. Le tout, sans compter les probl�mes li�s aux diff�rentes repr�sentation du passage � la ligne

    Du coup, il faut partir du principe qu'un fichier est "un bloc de granit" sur lequel on grave le contenu du fichier et que, si l'on veut modifier ce contenu, il faut "casser la pierre" et recommencer la gravure "depuis le d�but".

    On a alors deux solutions :

    La premi�re consiste � charger l'ensemble du fichier en m�moire avant d'apporter les modifications souhait�es (au donn�es en m�moire, s'entend) et de r��crire ces donn�es dans un fichier dont le nom sera, justement, le nom du fichier d'origine.

    La deuxi�me consiste � travailler simultan�ment sur deux fichiers : le premier, ouvert en lecture, dont on "extrait" les donn�es et le deuxi�me, ouvert en �criture, dans lequel on �crit les donn�es (apr�s modfication �ventuelle). Une fois que tout le fichier d'entr�e a �t� pris en compte, on peut �ventuellement envisager (ou non) de renommer le fichier de sortie afin de lui donner le nom du fichier d'entr�e (si tant est que ce soit n�cessaire / requis).

    NOTA : La premi�re solution est tr�s souvent pr�f�rable � la deuxi�me, essentiellement parce qu'il est plus efficace de lire un fichier d'une seule traite que de commencer � travailler "par petits bouts" (quelle que soit la taille des bouts) comme ce serait le cas pour la deuxi�me
    A m�diter: La solution la plus simple est toujours la moins compliqu�e
    Ce qui se con�oit bien s'�nonce clairement, et les mots pour le dire vous viennent ais�ment. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 f�vrier 2014
    mon tout nouveau blog

  9. #9
    Membre averti
    Homme Profil pro
    Architecte mat�riel
    Inscrit en
    Juin 2015
    Messages
    31
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (�le de France)

    Informations professionnelles :
    Activit� : Architecte mat�riel

    Informations forums :
    Inscription : Juin 2015
    Messages : 31
    Par d�faut
    merci

  10. #10
    Membre Expert
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par d�faut
    Citation Envoy� par koala01 Voir le message
    NOTA : La premi�re solution est tr�s souvent pr�f�rable � la deuxi�me, essentiellement parce qu'il est plus efficace de lire un fichier d'une seule traite que de commencer � travailler "par petits bouts" (quelle que soit la taille des bouts) comme ce serait le cas pour la deuxi�me
    �a d�pend ce qu�on consid�re... Personnellement je recommande toujours l�approche inverse lorsque c�est possible, ne serait-ce que parce que lire un fichier est une op�ration lente en g�n�ral (si le fichier est sur du nfs, par exemple, �a peut m�me bloquer, ou si c�est un flux stdin) et que la taille du fichier n�est alors plus un soucis.

    Enfin et surtout, il peut �tre tr�s important de ne pas laisser dans un �tat � cass� � (par exemple, si on met � jour le fichier de configuration de l�application), et donc, d��crire dans un fichier � part pour ensuite le d�placer sur l�ancien, et ce m�me si on a tout lu d�s le d�part (l��criture du fichier peut planter au milieu, juste pour faire c****).

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Ecriture/ Lecture d'une array dans un fichier
    Par Seth77 dans le forum C#
    R�ponses: 4
    Dernier message: 19/03/2012, 21h39
  2. [1.x] Lecture/Ecriture Depuis/Dans un fichier YAML
    Par Ibn Rochod dans le forum Symfony
    R�ponses: 5
    Dernier message: 25/04/2011, 13h08
  3. Ecriture simultan�e dans un fichier Excel
    Par apo.arutha dans le forum D�veloppement de jobs
    R�ponses: 7
    Dernier message: 21/01/2010, 16h14
  4. Ecriture simultan�e dans un fichier
    Par doudou34 dans le forum Entr�e/Sortie
    R�ponses: 7
    Dernier message: 30/09/2005, 14h26
  5. [C#] [.NET] Lecture d'une classe dans un fichier
    Par niPrM dans le forum Windows Forms
    R�ponses: 4
    Dernier message: 18/05/2004, 08h57

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