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

C++ Discussion :

Enregistrement sous fichier


Sujet :

C++

  1. #1
    Candidat au Club
    Inscrit en
    Novembre 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 9
    Points : 3
    Points
    3
    Par défaut Enregistrement sous fichier
    Bonjour tout le monde,
    J'ai un petit problème en C.J'enregistre des données (RegBinaryClass) dans la base de registre. je voudrais en plus de cet enregistrement permettre a l'utilisateur d'enregistrer ces données directement dans un fichier .bin. Avec donc une boîte dialogue lui permettant de nommer le fichier et de le placer ou bon lui semble. J'ai essayé d'utiliser la classe SaveFileDialog mais je n'y arrive pas.Es-ce que quelqu'un pourrait m'aider car je suis bloqué.
    Voici mon code :

    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
     
    else
    		{
    			//write the data directly to the registry
    			RegBinaryClass lRegDataPlugRawBytes;
    			// Calculate the checksum
    			lData[0] = mCalculateChecksum(&lData[1], aDataplugIni.aLastByteAddress);
     
    			AASSERT( lData != NULL );
    			if ( lData != NULL )
    			{
    				if(lRegDataPlugRawBytes.mInit( REG_KEY_BASE_NPEN_DATAPLUG_FOLDER, REG_KEY_NAME_NPEN_DATAPLUG_CONTENT, aDataplugIni.aLastByteAddress + 1 , (const LPBYTE)lData ), aDataplugIni.aLastByteAddress + 1)
    				{
    					lRegDataPlugRawBytes.mSetBinaryValues( (LPBYTE)lData, aDataplugIni.aLastByteAddress + 1 );
     
    					if(!(lRegDataPlugRawBytes.mWriteValue()))
    					{
    						MessageBox(strcat((char*)aDataplugIni.aErrorEntry.c_str(), "\nmWriteValue() failed"), "Error Writing to the registry", MB_ICONERROR | MB_OK);
    					}
    				}
    				else
    				{
    					MessageBox(strcat((char*)aDataplugIni.aErrorEntry.c_str(), "\nmInit() failed"), "Error Writing to the registry", MB_ICONERROR | MB_OK);					
    				}
    			}
    			else
    			{
    				MessageBox(aDataplugIni.aErrorEntry.c_str(), "Error Writing to the registry", MB_ICONERROR | MB_OK);
    			}
    		}


    Merci d'avance pour vos aides et conseils.

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Vous n'expliquez pas ce qui ne marche pas. ( ou l'endroit où vous bloquer ).
    De plus dans le code que vous avez mis je ne vois pas le SaveFileDialog
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    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 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Avec ces deux lignes, ça ne peut pas être du C (ou du moins, pas du C correct):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    RegBinaryClass lRegDataPlugRawBytes;
    ...
    if(lRegDataPlugRawBytes.mInit( REG_KEY_BASE_NPEN_DATAPLUG_FOLDER, REG_KEY_NAME_NPEN_DATAPLUG_CONTENT, aDataplugIni.aLastByteAddress + 1 , (const LPBYTE)lData ), aDataplugIni.aLastByteAddress + 1)
    Même si lRegDataPlugRawBytes.mInit était un pointeur de fonction (et non une fonction membre C++), il n'y a rien pour l'initialiser, donc ce serait un comportement indéfini.
    --> C'est forcément du C++

    RegBinaryClass n'est pas une classe C++ standard, ce n'est pas non plus une classe MFC (son nom ne commence pas par "C"). J'ai pensé que ça pouvait être une classe Borland, mais maintenant j'ai des doutes (son nom ne commence pas par "T"). Si c'est une classe perso, montrer son code.

    De plus, l'appel à MessageBox() est visiblement une surcharge pour une fonction membre d'une classe. Montrer le prototype de la fonction membre en question (avec le nom de la classe qui la contient).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #4
    Candidat au Club
    Inscrit en
    Novembre 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    Bonjour,
    Oui effectivement c'est du c++ j'ai mal placé mon message.Je suis désolé.
    Merci de bien vouloir m'aider.
    Je vais mettre le code de mon savedialog et de l'objet regbinaryClass.

    SaveFiledialog
    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
    //In case the Dataplug is not connected and the use enter ALT+E
    	if (RegisterHotKey(NULL,1,MOD_ALT,0x42))  //0x45 représente E
    	{
    		//Dialog box of the file record
     
    		saveFileDialog1->Title = "Select a dataplug file";
    		saveFileDialog1->FileName = "dataplug.bin";
    		saveFileDialog1->DefaultExt = "bin";
    		saveFileDialog1->Filter = "Binary File (*.bin)|*.bin|Tous (*.*)|*.*";
     
    		if (saveFileDialog1->ShowDialog() == System::Windows::Forms::DialogResult::OK)
    	{
     
    		//Stream to save file
    		Stream ^s = saveFileDialog1->OpenFile();
    		StreamWriter ^sw = gcnew StreamWriter(s);
    		sw->Write(textBox1->RegBinaryClass );
    		sw->Close();
    	}}
    RegBinaryClass:

    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
    class RegBinaryClass  : public RegSettingsEntryClass
    {
    public:
    	RegBinaryClass() : RegSettingsEntryClass(), aBinaryValues(NULL), aBinaryValuesSize(0), aMaxBinaryArraySize(0){};
    	RegBinaryClass(ULONG pInternalBufferSize);
    	RegBinaryClass(LPCSTR pEntryName, ULONG pInternalBufferSize, LPCSTR pProjectName, const LPBYTE pDefaultBinaryArrayValue = NULL, ULONG pDefaultBinaryArraySize = 0, bool pReadValue = true);
    	bool mInit( LPCSTR pProjectName, LPCSTR pEntryName, ULONG pInternalBufferSize, const LPBYTE pDefaultBinaryArrayValue = NULL, ULONG pDefaultBinaryArraySize = 0, bool pReadValue = true);
    	virtual ~RegBinaryClass();
    	// Inline conversion method (to LPBYTE)
    	operator LPBYTE(){return mGetBinaryBuffer();};
    	LPBYTE mGetBinaryBuffer(){return aBinaryValues;};
    	// Inline buffer access routines
    	ULONG mGetLogicalSize() const{return aBinaryValuesSize;};
    	ULONG mSetLogicalSize(ULONG pNewLogicalSize){aBinaryValuesSize = pNewLogicalSize;};
    	ULONG mGetBufferSize() const {return aMaxBinaryArraySize;};
    	// buffer access routines
    	ULONG mGetBinaryValues(LPBYTE pBinaryValues, ULONG pBinaryValuesSize) const;
    	void mSetBinaryValues(LPBYTE pBinaryValues, ULONG pBinaryValuesSize);
    protected:
    	long mSet(CRegKey& pKey);
    	long mGet(CRegKey& pKey);
    private:
    	LPBYTE aBinaryValues;
    	ULONG aBinaryValuesSize;
    	ULONG aMaxBinaryArraySize;
    };

  5. #5
    Candidat au Club
    Inscrit en
    Novembre 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    Ah oui et voila le prototype de Messagebox()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int MessageBox(LPCTSTR lpszText, LPCTSTR lpszCaption = _T(""), UINT nType = MB_OK)
    Merci d'avance pour vos éclaircissements.

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    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 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    		//Stream to save file
    		Stream ^s = saveFileDialog1->OpenFile();
    		StreamWriter ^sw = gcnew StreamWriter(s);
    		sw->Write(textBox1->RegBinaryClass );
    		sw->Close();
    C'est donc du C++/CLI. Par contre, j'ai du mal à comprendre la ligne avec le Write. Qu'essaies-tu d'écrire dans le fichier exactement?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. Enregistre sous (choix d'un fichier)
    Par MarsOran dans le forum SWT/JFace
    Réponses: 2
    Dernier message: 10/08/2009, 15h24
  2. Enregistré sous un fichier .txt
    Par Max(soul) dans le forum Dynamique
    Réponses: 26
    Dernier message: 16/01/2007, 15h09
  3. code pour enregistré un fichier sous different nom
    Par france38 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 28/10/2006, 13h31
  4. enregistrer lignes fichier sous condition
    Par makohsarah dans le forum Langage
    Réponses: 1
    Dernier message: 21/08/2006, 15h46
  5. [CSV] Enregistrer sous? Apres un fichier enregistré
    Par Anakior dans le forum Langage
    Réponses: 12
    Dernier message: 19/12/2005, 13h30

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