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 :

CFile et lecture par ligne d'un fichier ...


Sujet :

MFC

  1. #1
    Membre actif

    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2003
    Messages
    286
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 286
    Points : 255
    Points
    255
    Par défaut CFile et lecture par ligne d'un fichier ...
    Bonjour,

    J'ai un petit problème

    Je tente de lire un fichier texte en récupérant les données ligne par ligne.
    C'est pas ce qu'on pourrait appeller quelque chose de dur apparemment ...

    et ben si

    Je souhaite utiliser la classe CFile ou alors une autre classe du même style mais je n'ai rien trouvé sur google ou sur ce forum qui permette de faire ca (avec des fonctions maison par exemple ...)

    Je suis allé voir la FAQ mais std::... ne me conviens pas ...

    merci

    a+

  2. #2
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    salut,
    pas encore dans la faq, mais dans le post-it de la faq
    http://www.developpez.net/forums/vie...278273#2278273

  3. #3
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Au passage, le code de CStdioFile apprend de belles choses sur la gestion des FILE sous Windows...

  4. #4
    Membre actif

    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2003
    Messages
    286
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 286
    Points : 255
    Points
    255
    Par défaut
    Bonjour

    Merci pour vos réponse mais appremment ca ne fonctionne pas ....

    Voila le code que j'ai essayé de mettre en place (FAQ) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
       CStdioFile f2 ("c:\\test.txt", CFile::modeRead | CFile::typeText ); 
       CString s1, s2; 
       f2.ReadString(s1); // s1 contient "premiere ligne" 
       f2.Close();
    Si j'exécute cela j'ai l'erreur :
    error C2664: '__cdecl CStdioFile::CStdioFile(const unsigned short *,unsigned int)' : cannot convert parameter 1 from 'char [12]' to 'const unsigned short *'
    Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast

    error C2039: 'ReadString' : is not a member of 'CStdioFile'
    c:\program files\windows ce tools\wce420\workaboutpro\mfc\include\afx.h(1498) : see declaration of 'CStdioFile'
    Comme vous pouvez le voir, je développe sous WindowsCE (et peut-etre cela a t'il un rapport ...)

    Merci de m'aider SVP

  5. #5
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    ce qui se passe surtout, c'est que tu es en unicode
    essaie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CStdioFile f2 (L"c:\\test.txt", CFile::modeRead | CFile::typeText );

  6. #6
    Membre actif

    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2003
    Messages
    286
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 286
    Points : 255
    Points
    255
    Par défaut
    Oui pour ca, bien entendu, ce n'était pas le problème !
    Le problème est que la fonction ReadString() n'existe pas !! (pour WINCE je suppose)
    Si quelqu'un avait le code qui permet de lire par ligne ...

  7. #7
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    effectivement, je n'avais pas fait gaffe que tu étais sous CE ...

    Malheureusement, cette classe n'a plus grand interet sous CE ... Il va te falloir gérer les retours à la ligne seul, et utiliser CFile

  8. #8
    Membre actif

    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2003
    Messages
    286
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 286
    Points : 255
    Points
    255
    Par défaut
    Justement je me disais que peut-etre quelqu'un aurait les sources d'une telle fonction
    merci en tout cas

  9. #9
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    sinon, tu peux utiliser les flux c++ http://c.developpez.com/faq/cpp/?pag...ture_par_ligne

    Sinon, si ca te convient pas, j'essaierai de retrouver un équivalent avec les API, que j'avais fait y a quelques temps

  10. #10
    Membre actif

    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2003
    Messages
    286
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 286
    Points : 255
    Points
    255
    Par défaut
    effectivement je préfererais avoir l'équivalent en utilisant les APIs si c'est possible ...
    merci pour ton aide

  11. #11
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    un truc comme ca, ca devrait marcher
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    	#define MEMDISPO (MEM_RESERVE | MEM_COMMIT | MEM_TOP_DOWN)
     
    	HANDLE hFile; 
    	hFile = CreateFile("monFichier.txt",GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
    	if (hFile == INVALID_HANDLE_VALUE)
    		return;
    	DWORD dwSize;
    	dwSize = GetFileSize (hFile, NULL);
    	if (dwSize == INVALID_FILE_SIZE)
    		return;
     
    	char * buffer = (char *) VirtualAlloc(NULL, dwSize * sizeof(char), MEMDISPO, PAGE_READWRITE);
    	if (!buffer)
    	{
    		// erreur de mémoire
    		return;
    	}
     
    	DWORD bLu;
    	ReadFile(hFile,buffer,dwSize,&bLu,NULL);
     
    	CString buff = buffer;
    	while (buff.GetLength() > 0)
    	{
    		int res = buff.Find('\n');
    		CString ligne;
    		if (res == -1)
    		{
    			ligne = buff;
    			buff = "";
    		}
    		else
    		{
    			ligne = buff.Mid(0, res - 1);
    			buff = buff.Mid(res + 1);
    		}
    		//AfxMessageBox(ligne);
    	}
     
    	VirtualFree(buffer, 0, MEM_RELEASE);

  12. #12
    Membre actif

    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2003
    Messages
    286
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 286
    Points : 255
    Points
    255
    Par défaut
    merci !
    ca devrait etre ok

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

Discussions similaires

  1. lecture ligne par ligne d'un fichier texte
    Par toutounesan dans le forum VB.NET
    Réponses: 4
    Dernier message: 16/06/2011, 18h28
  2. Lecture lignes par lignes d'un fichier-Question "multi-OS"
    Par rambc dans le forum Général Python
    Réponses: 3
    Dernier message: 09/02/2009, 15h02
  3. lecture ligne par ligne de 2 fichiers simultanément
    Par lavazavio dans le forum Langage
    Réponses: 6
    Dernier message: 22/12/2008, 14h53
  4. Lecture ligne par ligne d'un fichier - fgets
    Par raphadw dans le forum Bibliothèque standard
    Réponses: 2
    Dernier message: 22/01/2008, 21h45
  5. Réponses: 20
    Dernier message: 09/02/2006, 09h45

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