Besoin d'aide en c++ , Gestion fichier et repertoire ! - Programmation
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 !
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 !!
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
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()
Marsh Posté le 05-06-2002 à 14:32:04
Dois je juste le placer juste aprer writefile je vais essayer
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.
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'
Marsh Posté le 05-06-2002 à 14:43:59
Maintenant il me mets
[C++ Error] Unit1.cpp(28): E2277 Lvalue required
Marsh Posté le 05-06-2002 à 14:45:19
Dslé, j'ai oublié de déclarer err.
DWORD err = GetLastError();
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
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.
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 ??
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
}}
}
//----
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
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 @+
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.
Marsh Posté le 09-06-2002 à 13:06:06
Bon, je vais quand même te donner la solution
Remplace ceci :
Code :
|
par ceci :
Code :
|
Et tu dois aussi fermer ton fichier.
A+
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 !
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... )
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+
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 !.
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