Besoin d'aide en c++ , Gestion fichier et repertoire !

Besoin d'aide en c++ , Gestion fichier et repertoire ! - Programmation

Marsh Posté le 05-06-2002 à 14:07:57    

Voila j'ai un pti probleme quand j'utilise la fonction WriteFile rien ne s'ecrit !
Mais la fonction Createfile marche tres bien !
Jetez un pti coup d'oeil à mon code source ;
 
                 Unit1 .cpp
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
#include <windows.h>
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//------------------------------------------------
---------------------------
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 
LPCTSTR lpBuffer = "Ceci est la chaîne qui sera écrite dans le fichier.";
 {       static HANDLE hFile;
 
    hFile = CreateFile( "FICHIERtest.DAT", GENERIC_READ | GENERIC_WRITE,
                                     0, NULL, OPEN_ALWAYS,
                                     FILE_ATTRIBUTE_NORMAL, NULL );
                                 WriteFile( hFile, lpBuffer, strlen( lpBuffer )+1,  
                            NULL, NULL );}
 
 
 
 
}
//---------------------------------------------------------------------------
                      Unit1.h
//---------------------------------------------------------------------------
 
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
        TButton *Button1;
        TEdit *Edit1;
        void __fastcall Button1Click(TObject *Sender);
private: // User declarations
public:  // User declarations
        __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
 
#endif

Reply

Marsh Posté le 05-06-2002 à 14:07:57   

Reply

Marsh Posté le 05-06-2002 à 14:12:00    

PS connaissez vous un bon site avec plein de tutoriaux en c++ ?
merci  
J'utilse c++ builder 6  
Si il ya une autre facon d'ecrire dans des fichiers faites le moi parvenir merci !

Reply

Marsh Posté le 05-06-2002 à 14:16:18    

As tu regardé l'erreur que te renvoyait GetLastError() ? Parce que si WriteFile ne marche pas, il te renvoie automatiquement un code d'erreur récupérable par GetLastError().
 
Autre chose : tu ouvres ton fichier, tu écris dedans (ou du moins tu essaies) mais tu ne le ferme pas !!


Message édité par Harkonnen le 06-05-2002 à 14:18:00

---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 05-06-2002 à 14:18:06    

Comment il n'y a aucune erreur le programme demare normalement  
je clique sur le bouton
il me crée le fichier
mais n'ecris rien dedans

Reply

Marsh Posté le 05-06-2002 à 14:19:37    

C'est pas parce que ton programme démarre normalement qu'ile ne contient pas d'erreur !!
 
Si rien ne s'écrit dans ton fichier, c'est parce que WriteFile() échoue ! Et quand WriteFile() échoue, il te renvoie un code d'erreur décrivant le pb, que tu peux récupérer par GetLastError()


Message édité par Harkonnen le 06-05-2002 à 14:20:36

---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 05-06-2002 à 14:21:04    

Comment dois je utiliser GelastError() ?

Reply

Marsh Posté le 05-06-2002 à 14:32:04    

Dois je juste le placer juste aprer writefile je vais essayer

Reply

Marsh Posté le 05-06-2002 à 14:35:15    

Il ne me marque rien !

Reply

Marsh Posté le 05-06-2002 à 14:36:12    

if (!WriteFile( hFile, lpBuffer, strlen( lpBuffer )+1, NULL, NULL )) {
     err = GetLastError();
}
 
regarde ensuite dans ton débugger ou par une MessageBox la valeur de err, puis vois à quelle erreur correspond ce code. corrige ton source en conséquence.


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 05-06-2002 à 14:41:31    

Il ya un probleme il me marque
[C++ Error] Unit1.cpp(27): E2451 Undefined symbol 'err'

Reply

Marsh Posté le 05-06-2002 à 14:41:31   

Reply

Marsh Posté le 05-06-2002 à 14:43:59    

Maintenant il me mets  
[C++ Error] Unit1.cpp(28): E2277 Lvalue required

Reply

Marsh Posté le 05-06-2002 à 14:45:19    

Dslé, j'ai oublié de déclarer err.
 
DWORD err = GetLastError();


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 05-06-2002 à 14:51:17    

Je clique mais ya rien qui se passe !  
A part la création du fichier
au faite j'ai un avetissement au compilage
[C++ Warning] Unit1.cpp(28): W8004 'err' is assigned a value that is never used

Reply

Marsh Posté le 05-06-2002 à 15:09:56    

Y'a rien qui se passe, c'est normal !
Tu mets un breakpoint sur la ligne contenant le GetLastError, tu lances le prog, il va s'arréter dès qu'il sera arrivé sur cette ligne.
Tu executes cette ligne en traçant, puis tu vérifies la valeur de err. A partir de la, tu recherches la description de l'erreur correspondante.
Oublie le warning, il signifie que err n'est jamais utilisé, mais c'est pas grave.


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 05-06-2002 à 15:18:35    

Qu'appelle tu pars tracer ??
Quand je demare le programme il s'arrette et reviens a la page d'edition  
A sa gauche il ya une boule rouge et un fleche verte ??
Que dois je faire ??

Reply

Marsh Posté le 05-06-2002 à 15:25:28    

Il me renvoie la valeur 87 ??
Quesque c'est je ne sais pas ??
 
Pour avoir la valeur 87 j'ai rajouter l'objet Edit
Voila mon programme
 
 
//------------------------------------------------
---------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//------------------------------------------------
---------------------------
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
LPCTSTR lpBuffer = "Ceci est la chaîne qui sera écrite dans le fichier.";
{       static HANDLE hFile;
 
   hFile = CreateFile( "FICHIERtest.DAT", GENERIC_READ | GENERIC_WRITE,
                                    0, NULL, OPEN_ALWAYS,
                                    FILE_ATTRIBUTE_NORMAL, NULL );
                               if (!WriteFile( hFile, lpBuffer, strlen( lpBuffer )+1, NULL, NULL )) {
DWORD    err = GetLastError();
Edit1->Text = err ;// J'obtient la valeur 87
}}
}
//----

Reply

Marsh Posté le 05-06-2002 à 15:41:43    

erreur 87 = paramètre incorrect
 
tu as un paramètre incorrect dans ta fonction WriteFile, à ton avis, lequel c'est ?
 
cherche le, si tu trouves pas, je t'aiderai.
 
pour info :  
 
la signification des codes d'erreur de GetLastError() :
http://msdn.microsoft.com/library/ [...] t_7oz7.asp


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 09-06-2002 à 11:13:29    

Mon pc a plante mortel !  
Et je ne peux plus progz par contre  
je vais en recevoir un nouveau samedi si tous se passe bien
@+
J'esssaierais de résoudre ca @+

Reply

Marsh Posté le 09-06-2002 à 11:27:20    

Faut fermer le fichier ou faire un flush pour qu'il y ait quelque chose dans le fichier.

Reply

Marsh Posté le 09-06-2002 à 13:06:06    

Bon, je vais quand même te donner la solution  :D  
 
Remplace ceci :

Code :
  1. WriteFile(hFile, lpBuffer, strlen( lpBuffer )+1, NULL, NULL);


par ceci :

Code :
  1. DWORD NbLus=0;
  2. WriteFile(hFile, lpBuffer, strlen( lpBuffer )+1, &NbLus, NULL);


Et tu dois aussi fermer ton fichier.
 
A+


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 09-06-2002 à 20:40:06    

Merci bcp j'ai pas encore essayer !
Mais je l'essaierais au plus vite quand j'aurais mon nouveau pC !!
Vendredi soir  
 
J'espere que tous se deroulera bien ?
Sinon pour lire dans un fichier
faut aussi que je rajoute &NbLus ?
Que veut dire cette fonction &NbLus merci !
 [:spytec cdr]  [:sivep]

Reply

Marsh Posté le 09-06-2002 à 20:54:22    

Non, tu ne dois pas rajouter NbLus, mais remplacer l'avant dernier paramètre (NULL), par &NbLus. C'était le paramètre invalide qui te provoquait l'erreur 87 (j'aurais voulu que tu le trouves toi même, mais bon... :d)
Ce paramètre (et non cette fonction) est un pointeur vers la variable qui recevra le nombre de caractères écrits. Ce pointeur ne doit pas être NULL.
La variable NbLus est déclarée sur la ligne du dessus, que tu devras inclure dans ton source.
 
A+


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 09-06-2002 à 21:30:15    

je ne l'aurais pas trouver de toute facon alors merci bcp  
sinon une tite question !
Comment puis je faire en c++ ou mieux dans c++ builder  
Un system de Fenetre dans une fenetre ?
je sais c'est compliqué je reexplique  
Comme dans Excel :
Une grande fenetre avec le fond gris et le menu
Et des fenetres qui s'ajoute dans se fond gris au fur et à mesure des élements selectionnés dans le menus , ceux ci étant tous différents (toutes les fenetres sont sont differentes et sont implanté dans la premiere fenetre avec le menu )
Si vous comprenez répondez moi merci !.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed