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

MFC Discussion :

problème écriture sur un fichier


Sujet :

MFC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Juin 2003
    Messages
    270
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 270
    Par défaut problème écriture sur un fichier
    Bonjour,

    je souhaite écrire une CString dans un fichier. Voici comment j'essaye de le faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CFile fichier;
    CString desc = "Le texte que je souhaite afficher";
    fichier.Open(fileName,CFile::modeWrite);
    fichier.Write((LPCTSTR)desc, desc.GetLength());
    fichier.Close;
    Mon texte s'affiche à moitié et il y a un espace qui est inséré entre chaque caractère: "L e t e x t e q u e j e s"

    Si je change: desc.GetLength() en 2*desc.GetLength()
    le texte s'affiche entièrement, mais il y a toujours un espace entre chaque caractère.

    Est-ce que quequ'un sait comment faire ?

    Ca m'aiderait beaucoup !

  2. #2
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    salut,
    hum ton projet serait pas en unicode par hasard ?

  3. #3
    Membre éclairé
    Inscrit en
    Juin 2003
    Messages
    270
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 270
    Par défaut
    Oui, ça doit être ça. Dans les propriétés de mon projet, jeu de caractère était mis à UNICODE. Je l'ai mis à non défini, mais ça ne résoud pas mon problème.

    Que dois-je faire ?

    EDIT: et y a t-il un moyen d'obtenir un résultat correct même si le projet est en UNICODE ?

    Merci.

  4. #4
    Membre éclairé
    Inscrit en
    Juin 2003
    Messages
    270
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 270
    Par défaut
    J'applique désormais cette méthode:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    	unsigned char *donnees = NULL;
    	CFile fichier;
    	long taille = buffer.GetLength();
     
    	donnees = new unsigned char[taille];
     
    	for (int i = 0;i<taille;i++) donnees[i] = buffer[i];
     
    	_wremove(fileName);
     
    	fichier.Open(fileName,CFile::modeCreate | CFile::modeWrite);
    	fichier.Write(donnees, taille);
    Ca marche à un détail près: il y a des caractères spéciaux qui s'insèrent au milieu de ma chaîne de caractères. Celle-ci est constituée de différents attributs récupérés dans une base de donnée, et ils semblent OK.

    D'où ça peut venir ?

    Pfff, tout ça pour la création d'un pauvre fichier texte, c'est démoralisant.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Directeur technique
    Inscrit en
    Juin 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juin 2007
    Messages : 5
    Par défaut
    Très très bizare...

    Je chercais à faire la même chose que toi, et en utilisant un code similaire à celui de ton premier post, j'obtenais les même résultat que toi (à savoir des caractères espacés et la seulement la moitié de la taille de la chaine souhaitées).

    Ta deuxième méthode ne m'enchantant pas plus que ça (lol), je me suis orienté sur une éventuelle modification du jeu de caractère (de l'UNICODE à l'MBCS et inversement). J'ai donc modifier mon code de manière à convertir les fonctions utilisées en MBCS, celle de l'unicode ne marchant plus.

    Ex :
    UNICODE -> GetWindowTextW
    MBCS -> GetWindowTextA

    Je me suis alors rendu compte que le compilateur acceptait la fonction GetWindowText qui doit s'adapter directement je pense au jeu de caractère sélectionné.

    J'ai donc réessayer de compiler mon code une dernière fois en UNICODE afin d'effectuer un dernière essai et abandonner définitivement le fait d'écrire dans un fichier texte avec une appli MFC, et là magie... le texte du fichier était entier et non espacé.

    J'ai du coups réalisé des modifications à mon code pour valider cette découverte, de manière à être sur que ce ne soit pas un bug de ma machine, mais les résultats sont toujours bon.

    Peut être que ce post de ma part ne servira pas à grand chose, mais ce qui tomberont dessus pourront toujours essayé de creuser un plus le sujet dans cette direction.

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

Discussions similaires

  1. Lecture et écriture sur un fichier txt
    Par freemanqc dans le forum Langage
    Réponses: 13
    Dernier message: 28/02/2008, 05h29
  2. Droit en écriture sur des fichiers
    Par HULK dans le forum VB.NET
    Réponses: 2
    Dernier message: 26/10/2007, 10h09
  3. Problème écriture dans un fichier
    Par bob_warrior89 dans le forum C
    Réponses: 11
    Dernier message: 14/06/2007, 15h37
  4. [Rman]problème écriture sur fichier (linux)
    Par Invité dans le forum Oracle
    Réponses: 20
    Dernier message: 30/08/2006, 05h52

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