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++/CLI Discussion :

probleme pour écrire dans un fichier texte


Sujet :

C++/CLI

  1. #1
    Membre du Club
    probleme pour écrire dans un fichier texte
    Bonjour,

    j'ai un serveur qui récupère des données et les écrit dans un fichier texte data.txt via la class ofstream, et ca marche très bien. Mais quand j'entre dans le fichier data.txt, que j'efface toutes les data dans le fichier, et ensuite réémet des données au serveur, le serveur inscrit des données totalement fausses dans le fichier (plein de 0, on dirait meme de l'hexa).

    j'ai remarqué que j'émet 40ko, et lorsque j'efface les data dans le fichier data.txt puis réémet des data sur le serveur, mon fichier fait 80ko de data au lieu de 40ko.

    Avez vous une idée de pourquoi ca fait ca. Est ce un probleme de curseur, car le serveur écrit à un endroit et ne sait pas que des données ont été effacé?

    voici mon code:
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    int main(int argc, char const *argv[])
    {
    	ofstream fichier("data.txt", ios::in | ios::trunc);
    	TcpServer socket(30000);  // numéro du port = 30000
    	string textRecu;
     
     
    	if(fichier){
     
    		while(1){
    			textRecu = socket.lire();
     
    			fichier<< textRecu << std::endl;
     
    			}
    }


    merci d'avance pour votre aide

  2. #2
    Expert éminent sénior
    Pourquoi ios::in sur ton flux en écriture?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre du Club
    oui, j'ai fait des tests j'ai du oublié de l'enlever car ios::out est mis par défaut.

    J'arrive via fichier.seekp(0) a placer mon curseur au début du fichier texte mais malheureusement j'écris par dessus mon texte Y'a t'il pas un moyen de se placer au début du fichier et lorsque j'écris, ca écrit avant le texte sans l'effacer?

  4. #4
    Expert confirmé
    Bonjour,

    Un fichier c'est comme une feuille de papier. Une fois que tu as écris, on ne peut pas ajouter des choses avant. On peut remplacer (et à condition que le remplacement ait la exactement la même longueur que ce qui est effacé.) On peut évidemment ajouter des choses à la fin du texte déjà écrit en utilisant ios::ate. Pour "corriger" un fichier, pas d'autres moyens que d'en écrire un autre quitte à la renommer à la fin.

  5. #5
    Expert éminent sénior
    On peut aussi lire le contenu du fichier, l'ajouter à la chaine que l'on veut insérer en début de fichier, rouvrir le fichier en écriture, et y déverser le résultat de la concaténation du préfixe et du contenu du fichier précédemment lu.