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++/CLI Discussion :

Enregistrer depuis un SaveFileDialog cr�e le fichier mais n'ecrit rien dedans


Sujet :

C++/CLI

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre confirm� Avatar de Hemophilius
    Homme Profil pro
    �tudiant
    Inscrit en
    Juin 2008
    Messages
    105
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 105
    Par d�faut Enregistrer depuis un SaveFileDialog cr�e le fichier mais n'ecrit rien dedans
    Rebonjour,
    Voici mon code (il provient de : http://msdn.microsoft.com/en-us/libr...iledialog.aspx) :

    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
    private:
       void button1_Click( Object^ /*sender*/, System::EventArgs^ /*e*/ )
       {
          Stream^ myStream;
          SaveFileDialog^ saveFileDialog1 = gcnew SaveFileDialog;
          saveFileDialog1->Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
          saveFileDialog1->FilterIndex = 2;
          saveFileDialog1->RestoreDirectory = true;
          if ( saveFileDialog1->ShowDialog() == System::Windows::Forms::DialogResult::OK )
          {
             if ( (myStream = saveFileDialog1->OpenFile()) != nullptr )
             {
    
                // Code to write the stream goes here.
                myStream->Close();
             }
          }
       }
    R�sultat, il m'affiche 5 erreurs :

    Erreur 6 error C2227: la partie gauche de '->Close' doit pointer vers un type class/struct/union/g�n�rique c:\documents and settings\utilisateur\mes documents\visual studio 2008\projects\heroes v trigger editor\heroes v trigger editor\Form1.h 2382

    Erreur 2 error C2065: 'Stream' : identificateur non d�clar� c:\documents and settings\utilisateur\mes documents\visual studio 2008\projects\heroes v trigger editor\heroes v trigger editor\Form1.h 2371

    Erreur 3 error C2065: 'myStream' : identificateur non d�clar� c:\documents and settings\utilisateur\mes documents\visual studio 2008\projects\heroes v trigger editor\heroes v trigger editor\Form1.h 2371

    Erreur 4 error C2065: 'myStream' : identificateur non d�clar� c:\documents and settings\utilisateur\mes documents\visual studio 2008\projects\heroes v trigger editor\heroes v trigger editor\Form1.h 2371

    Erreur 5 error C2065: 'myStream' : identificateur non d�clar� c:\documents and settings\utilisateur\mes documents\visual studio 2008\projects\heroes v trigger editor\heroes v trigger editor\Form1.h 2371
    Je comprends ces erreurs. Alors, je corrige le tout, j'enl�ve carr�ment les lignes
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    Stream^ myStream; myStream->Close();
    et le d�but de ligne "myStream = "

    Maintenant, le programme se lance correctement. Mais quand j'enregistre depuis ce dialogue, et que je vais voir apr�s le fichier que j'ai enregistr�, rien n'y est... Il est totalement blanc, alors qu'il y avait des choses �crites dans la richtextbox.

    Peut-�tre faut-il lier la richtextbox avec ce dialogue, pour qu'il sache ce qu'il faut enregistrer ? Quoi qu'il en soit, je n'ai encore rien trouv�

  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
    Par d�faut
    si tu supprimes l'�criture dans le stream, c'est normal qu'il n'y ait rien dedans.

    A mon avis, tes erreurs proviennent du fait que t'as oubli� un namespace. Il faut �galement enregistrer manuellement le contenu de ton richtextbox

  3. #3
    Membre confirm� Avatar de Hemophilius
    Homme Profil pro
    �tudiant
    Inscrit en
    Juin 2008
    Messages
    105
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 105
    Par d�faut
    Merci
    Le probl�me, c'est que je n'ai pas de namespace... J'ai pourtant "includ�" fstream et iostream. Mais cela ne change rien. Et dans System ou std, je ne trouve aucun 'Stream'.

    Puis aussi, comment sa enregistrer manuellement ? J'avais fait un truc tr�s 'manuel', avec deux textbox o� l'utilisateur devait indiquer le nom et le chemin du fichier � enregistrer. Cela fonctionnait tr�s bien, mais ce n'�tait pas � l'�preuve des erreurs de manip, et surtout ce n'�tait pas tr�s... professionnel.

    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    private: System::Void BoutonEnregistrer_Click(System::Object^  sender, System::EventArgs^  e) {
                 //SAVE CURRENT FILE
                this->ProgressBar1->Value = 22;
                this->TexteStatutVAR->Text = "Création du fichier de sauvegarde...";
                Application::DoEvents();
                if (this->FileNameBox->Text == "")
                {
                    this->FileNameBox->Text = "Untitled";
                    BOOL MessageBeep(MB_ICONEXCLAMATION); 
                    MessageBox::Show("Vous n'aviez pas précisé de nom pour votre fichier. Par défaut, il a été nommé 'Untitled'.", "Information", MessageBoxButtons::OK, MessageBoxIcon::Information); 
                }
                if (this->PathNameBox->Text == "")
                {
                    this->PathNameBox->Text = "Redacted triggers\\\\";
                    BOOL MessageBeep(MB_ICONEXCLAMATION); 
                    MessageBox::Show("Vous n'aviez pas précisé de dossier où stocker votre fichier. Par défaut, \nle fichier va être enregistré dans \\Redacted triggers\\ (présent dans le dossier d'installation du programme).", "Information", MessageBoxButtons::OK, MessageBoxIcon::Information); 
                }
                    //First settings
                 System::String ^PathNameS, ^FileNameS, ^MyFileS;
                 PathNameS = this->PathNameBox->Text;
                 FileNameS = this->FileNameBox->Text;
                 MyFileS = (PathNameS + FileNameS + ".trig");
     
                 //Variables and Other
                 FILE *fichier1;
     
                 //Store Current text
                 System::String ^Text2SaveSTRING = this->TriggersRedactionSpace->Text;
     
                this->ProgressBar1->Value = 45;
                this->TexteStatutVAR->Text = "Enregistrement des informations...";
                Application::DoEvents();
                 //Convert in usable characters table
                 char *Text2Save = static_cast<char *>(System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(Text2SaveSTRING).ToPointer());
                 char *MyFile = static_cast<char *>(System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(MyFileS).ToPointer());
     
                 //Open Save Dialog
     
                 //Open file to put stored text in it /--\ CHANGE "FILENAME" !
                 fichier1 = fopen(MyFile, "w");
     
                this->ProgressBar1->Value = 75;
                this->TexteStatutVAR->Text = "Ouverture du fichier...";
                Application::DoEvents();
     
                //If the file exist, re-write over it the stored text
                if(is_readable(MyFile))
                    {
                    this->ProgressBar1->Value = 100;
                    this->TexteStatutVAR->Text = "Écriture du fichier *.trig...";
                    Application::DoEvents();
                    fprintf(fichier1, Text2Save);
                    fclose(fichier1);
                    }
                else
                    {
                    this->ProgressBar1->Value = 0;
                    this->TexteStatutVAR->Text = "Erreur lors de la vérification !";
                    Application::DoEvents();
                    BOOL MessageBeep(MB_ICONEXCLAMATION); 
                    System::Windows::Forms::MessageBox::Show("Erreur lors du test de l'ouverture du fichier. La procédure de sauvegarde a été annulée : veuillez recommencer.\nSi l'erreur persiste, le mieux est de créer manuellement un fichier .txt où vous copiez-collez votre code.", "Sauvegarde non effectuée", MessageBoxButtons::OK, MessageBoxIcon::Warning); 
                    }
     
                //Clean memory
                System::Runtime::InteropServices::Marshal::FreeHGlobal(safe_cast<IntPtr>(Text2Save));
     
                //END SAVE CURRENT FILE
                this->ProgressBar1->Value = 0;
                this->TexteStatutVAR->Text = "Fichier enregistré avec succès !";
                Application::DoEvents();
                System::Threading::Thread::Sleep(2000);
                this->TexteStatutVAR->Text = "Prêt";
                Application::DoEvents();
             }

  4. #4
    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
    Par d�faut
    Les stream se trouvent dans le namespace System.IO, voir dans la faq http://dotnet.developpez.com/faq/cpp...ge=file#rwtext
    Utiliser une SaveFileDialog est une bonne id�e, mais c'est apr�s avoir indiqu� le fichier qu'il faut �crire dedans http://nico-pyright.developpez.com/t...opensaveDialog.

  5. #5
    Membre confirm� Avatar de Hemophilius
    Homme Profil pro
    �tudiant
    Inscrit en
    Juin 2008
    Messages
    105
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 105
    Par d�faut
    D�sol�, mais je ne comprends strictement rien � ton article sur l'�criture d'un fichier texte. Comment obtenir le nom de fichier saisi par l'utilisateur dans la bo�te de dialogue ? Je ne veux pas que tous les fichiers s'appellent monfichier...
    Comment passer du stream � un string qui remplacera l'existant du fichier d�j� cr�� ?
    Et puis l'intellisense ne reconnait pas File::Exists(...).
    D�j�, qu'est-ce qu'un stream ou flux ? C'est un fichier ? Comment on �crit dans le fichier � partir d'un flux ?

  6. #6
    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
    Par d�faut
    un petit exemple vaut mieux qu'un long discours

    cr�e un nouveau projet
    Fais glisser un textbox multiligne sur ta form
    un bouton
    un savefiledialog

    ensuite, sur le clique du bouton (qui sert � enregistrer bien sur ...)

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    System::Void button1_Click(System::Object^  sender, System::EventArgs^  e)
    {
    	saveFileDialog1->Title = "Sélectionnez un fichier";
    	saveFileDialog1->FileName = nullptr;
    	saveFileDialog1->DefaultExt = "txt";
    	saveFileDialog1->Filter = "Fichiers Texte (*.txt)|*.txt|Tous (*.*)|*.*";
    	if (saveFileDialog1->ShowDialog() == System::Windows::Forms::DialogResult::OK)
    	{
    		Stream ^s = saveFileDialog1->OpenFile();
    		StreamWriter ^sw = gcnew StreamWriter(s);
    		sw->Write(textBox1->Text);
    		sw->Close();
    	}
    }

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. R�ponses: 7
    Dernier message: 29/04/2015, 16h23
  2. Cr��e des enregistrements depuis un formulaire
    Par marie10 dans le forum Access
    R�ponses: 5
    Dernier message: 23/01/2006, 10h59
  3. Macro depuis word qui ferme un fichier excel
    Par max2245 dans le forum VBA Word
    R�ponses: 7
    Dernier message: 13/01/2006, 09h57
  4. L'utilisateur peut créer un fichier mais pas l'effacer
    Par crakazoid dans le forum Administration syst�me
    R�ponses: 2
    Dernier message: 22/11/2005, 07h45
  5. R�ponses: 10
    Dernier message: 16/12/2004, 15h23

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