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 et mettre le résultat dans un buffer


Sujet :

MFC

  1. #1
    Membre habitué Avatar de Colbix
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    266
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 266
    Points : 150
    Points
    150
    Par défaut Lire un fichier et mettre le résultat dans un buffer
    Voila, je vais voir sur le FAQ, je trouve ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    HANDLE hFile; 
    hFile = CreateFile("test.txt",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);
    // ...
    delete buffer;
    C'est parfait, ca compile et ca affiche tout ce qu'il faut, mais le problème est que lorsque j'écrit sur mon fichier, il me dis que le fichier est déjà utilisé.

    Voila ce que je fait, en gros qui me donne cette erreur :
    readFile() // qui appel le code ci dessus
    writeOnFile("coucou")
    Que dois-jet faire ?
    Le CreateFile ne gène pas si le fichier existe déjà ????

    Merci de votre patience
    Colb.

  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
    si je peux me permettre une suggestion, c'est d'uniformiser les technos en utilisant la capacité du framework .Net à gérer les entrées sorties.
    A quelques adaptations près pour pouvoir l'utiliser avec le C++ .Net 1.x, regarde de ce coté http://dotnet.developpez.com/faq/cpp...ge=file#rwtext

  3. #3
    Membre confirmé Avatar de Mayti4
    Inscrit en
    Février 2004
    Messages
    442
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 442
    Points : 488
    Points
    488
    Par défaut
    Le CreateFile ne gène pas si le fichier existe déjà ????
    Le fichier doit exister (OPEN_EXISTING).

    Il te manque le flag GENERIC_WRITE.

  4. #4
    Membre habitué Avatar de Colbix
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    266
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 266
    Points : 150
    Points
    150
    Par défaut
    Merci !
    Je vasi regarder sur le FAQ !

    Pour le flag GENERIC_WRITE, je ne crois pas, il compile parfaitement... Mais je vasi un peu me renseigner

    A bientôt, je vous tien au courant.
    Colb.

  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
    si tu choisis d'utiliser l'api win32, je te suggère de regarder l'aide dans la msdn

    que ca compile ne veut pas dire que ca marche et que ca soit adapté à ton besoin.
    Dans ce cas, le flag sera différent (ou une combinaison) en fonction de si tu veux lire ou écrire, si tu veux créer un fichier, écraser le fichier, etc ...

  6. #6
    Membre habitué Avatar de Colbix
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    266
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 266
    Points : 150
    Points
    150
    Par défaut
    Citation Envoyé par nico-pyright(c)
    si tu choisis d'utiliser l'api win32, je te suggère de regarder l'aide dans la msdn

    que ca compile ne veut pas dire que ca marche et que ca soit adapté à ton besoin.
    Dans ce cas, le flag sera différent (ou une combinaison) en fonction de si tu veux lire ou écrire, si tu veux créer un fichier, écraser le fichier, etc ...
    Hihi, vui, je sais, mais la ca faisait partiellement ce que j'avais besoin .

    Enfin bon, j'ai regardé sur le FAQ le lien que tu m'avais passé. J'utilise d'abord tel quel, et j'ai des pbl denouveau ...
    Evidement je met des * au lieu des ^ etc, mais il ne reconnais pas toutes les fonction (j'ai pourtant fait l'include de IO).

    Voila les erreurs :
    error C2065: 'gcnew' : undeclared identifier
    error C2065: 'nullptr' : undeclared identifier
    error C2146: syntax error : missing ';' before identifier 'StreamReader'
    error C2146: syntax error : missing ';' before identifier 'StreamWriter'
    error C3604: 'System::IO::StreamReader': can only create a __gc type object on the __gc heap
    error C3604: 'System::IO::StreamWriter': can only create a __gc type object error C3861: 'gcnew': identifier not found, even with argument-dependent lookup
    En tout cas le ReadLine() me semble plus aproprié à mes besoin (comme tu disais ).
    Merci des vos réponses

  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
    alors, gcnew est à remplacer par new.
    nullptr est à remplacer par null

    ca devrait suffire pour commencer

  8. #8
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    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 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Au fait, en ce qui concerne l'ouverture avec l'API Windows : Je pense que tu oubliais simplement de fermer le fichier après lecture : on utilise la fonction CloseHandle() pour cela.

  9. #9
    Membre habitué Avatar de Colbix
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    266
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 266
    Points : 150
    Points
    150
    Par défaut
    Très bien, je vais essayé.
    Il faut aussi remplacer "finally" par "__finally".

    Bon ca marche, enfin ca compile, mais j'aimerai mettre toutes les ligne dans un buffer pour ensuite faire quelquechose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myForm->texBox->Text = leBuffer
    Affin d'afficher sur le form le contenu du fichier
    A bientôt

  10. #10
    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
    deux choses :
    - il y a un commentaire dans le code de la faq expliquant que pour lire tout d'un coup, on peut utiliser readToEnd
    - tu aurais pu le trouver d'ailleurs en consultant l'aide

  11. #11
    Membre habitué Avatar de Colbix
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    266
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 266
    Points : 150
    Points
    150
    Par défaut
    Hum vui c'est vrai, je me suis laissé emporte à vous demander comment faire au lieu de rechercher un peu...
    En tout cas, ca fonctionne parfaitement maintenant, énorme merci

    Voici mon code final pour les prochains qui seront peut-être dans le besoi nde faire un truc aussi simple et qui comme moi se plante partout. lol.
    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
    [	private: System::Void readFile(String* nomFichier)
    		 {
    			StreamReader* sr;
    			StreamWriter* sw;
    			String* line;
    			try
    			{
    				if (! File::Exists(nomFichier))
    				{
    					// Le fichier n'existe pas. On le crée.
    					sw = new StreamWriter(nomFichier);
    					sw->WriteLine("Bonjour. Nous sommes le {0} et il est {1} ",
    						DateTime::Now.ToLongDateString(),
    						DateTime::Now.ToLongTimeString());
    					sw->Close();
    					// Remarque : On peut utiliser sw = File::AppendText(NomFichier) pour ajouter
    					// du texte à un fichier existant
    				}
    				// Ouverture du fichier et écriture du contenu du fichier sur la console
    				sr = new StreamReader(nomFichier);
    				//Console::WriteLine("Début du fichier");
    				line = sr->ReadToEnd();
    				this->text_logView->Text = line;
     
    			}
    			__finally
    			{
    				// Fermeture streamreader
    				if (sr != NULL) sr->Close();
    			}
     
    		 }
    C'est pil poile ce qu'il y a dans le FAQ a part que je lis le fichier en entier

    Encore merci !
    A très bientôt
    Colb.

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

Discussions similaires

  1. Lire une ligne et mettre le résultat dans des variables
    Par www.rubis dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 06/05/2014, 15h23
  2. Réponses: 2
    Dernier message: 04/07/2012, 16h32
  3. [Batch] lire dans un fichier et mettre le résultat dans une variable
    Par danydan01 dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 09/06/2010, 12h28
  4. Réponses: 2
    Dernier message: 27/04/2007, 13h45
  5. Lire un fichier Texte d'1 bloc dans une chaine
    Par User dans le forum Langage
    Réponses: 6
    Dernier message: 13/09/2006, 21h56

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