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 :

lire un fichier dans un buffer


Sujet :

MFC

  1. #1
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 110
    Points : 59
    Points
    59
    Par défaut lire un fichier dans un buffer
    Bonjour à tous,

    j'ai essayer les deux methodes qui existe dans la fac mais c'est pas parfait!!
    bon voila , je m'explique un peu plus:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    	CFile f2 (	m_strConfigFileName, CFile::modeRead | CFile::typeText );
       ULONGLONG taille = f2.GetLength();
       char *buffer = new char[(int)taille+1];
       CString str;
       UINT nOctetsLu = f2.Read(buffer, (int)taille);
     
       str = buffer;
     
       m_EditConfig.SetWindowText(str);// j'affiche le str dans un edit
       f2.Close();
       delete buffer;
    ça se compile normalement mais lors de l'execution j'ai le message d'erreur "Debug librairie" debug assertion failed!!, et lorsque je fait ignorer j'ai le contenu de mon fichier dans l'edit mais avec des caractères bizard en bas!!


    pour la deuxieme methode :
    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
    18
    HANDLE hFile; 
    	hFile = CreateFile(	m_strConfigFileName,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
    	if (hFile == INVALID_HANDLE_VALUE)
    	return false;
     
    	DWORD dwSize;
    	dwSize = GetFileSize (hFile, NULL);
    	if (dwSize == INVALID_FILE_SIZE)
    	return false;
     
     
    	char *buffer = new char[dwSize+1];
    	DWORD bLu;
    	ReadFile(hFile,buffer,dwSize,&bLu,NULL);
     
    	m_EditConfig.SetWindowText(buffer);
    		UpdateData(FALSE);
    	delete buffer;
    avec cette methode j'ai pas de message d'erreur mais j'ai toujours des caractères bizard en bas!!

    comment doit on expliquer ça?

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Probablement des caractères spéciaux que le champs Edit ne sait pas afficher.

    On peut avoir une copie d'écran de ton champs Edit et le fichier avec lequel tu testes (s'il n'est pas trop gros)
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 110
    Points : 59
    Points
    59
    Par défaut
    ok, les voila!
    Images attachées Images attachées   

  4. #4
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Je pense qu'après ta lecture, tu ne termine pas ta string

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	char *buffer = new char[dwSize+1];
    	DWORD bLu;
    	ReadFile(hFile,buffer,dwSize,&bLu,NULL);
    	buffer[bLu] = 0;
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  5. #5
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 110
    Points : 59
    Points
    59
    Par défaut
    cool, ça marche!
    mais au fait, j'ai pas trop compris le principe pourquoi faut mettre buffer[bLu] = 0;
    est ce une marque de fin?

  6. #6
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Exemple avec un fichier de 20 octets

    Tu alloues 21 octets ==> OK. Par contre c'est 21 octets ont une valeur aléatoire.
    Tu lis 20 octets ==> OK. Par contre, la valeur de l'octet 21 n'est pas modifiée/positionnée donc sa valeur est toujours aléatoire.

    Tu as donc une chaine de caractères de 20 octets non obligatoirement terminée par 0, tu as donc une chaine de caractères batarde.

    Quand tu fait SetWindowText() avec cette chaine batarde, Windows recherche le 1er caractère 0 comme indicateur de fin de chaine et va prendre les octets 21, 22, 23 et suivants comme valides dans la chaine de caractères (d'où tes caractères bizarres). Tu as même eu de la chance que cela ne crash pas ton appli
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  7. #7
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 110
    Points : 59
    Points
    59
    Par défaut
    très bien expliqué.
    Merci beaucoup Raymond

    je pense qu'il faut rajouter cette ligne de code dans la fac

  8. #8
    Membre éclairé
    Avatar de PetitPapaNoël
    Développeur informatique
    Inscrit en
    Septembre 2006
    Messages
    559
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 559
    Points : 749
    Points
    749
    Par défaut
    Citation Envoyé par Djawida Voir le message
    je pense qu'il faut rajouter cette ligne de code dans la fac
    Tu veux dire dans la FAQ
    FAQ = Foire Aux Questions en français, ou Frequently Asked Questions en anglais.

  9. #9
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Citation Envoyé par Djawida Voir le message
    très bien expliqué.
    Merci beaucoup Raymond

    je pense qu'il faut rajouter cette ligne de code dans la fac
    Je viens d'envoyer un petit message au contributeur (nico-pyright(c)) de cette entrée dans la FAQ
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

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

Discussions similaires

  1. Lire un fichier dans un serveur ftp
    Par kakrocq dans le forum VC++ .NET
    Réponses: 3
    Dernier message: 12/05/2007, 08h49
  2. copier un fichier dans un buffer
    Par gdpasmini dans le forum C
    Réponses: 20
    Dernier message: 05/10/2006, 19h05
  3. méthode de lecture d'un fichier dans un buffer
    Par Mestoph dans le forum Composants VCL
    Réponses: 6
    Dernier message: 24/02/2006, 10h07
  4. [JAR] lire un fichier dans un jar OU hors d'un jar
    Par yveslamand dans le forum Général Java
    Réponses: 13
    Dernier message: 25/04/2005, 14h38

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