Comment : enregistrer des fichiers à l'aide du composant SaveFileDialog
Le composant SaveFileDialog permet aux utilisateurs de parcourir le système de fichiers et de sélectionner les fichiers à enregistrer. La boîte de dialogue retourne le chemin d'accès et le nom du fichier sélectionné dans la boîte de dialogue. Vous devez toutefois écrire le code pour écrire réellement les fichiers sur le disque.
Pour enregistrer un fichier à l'aide du composant SaveFileDialog
Affichez la boîte de dialogue Enregistrer le fichier et appelez une méthode pour enregistrer le fichier sélectionné.
Utilisez la méthode OpenFile du composant SaveFileDialog pour enregistrer le fichier. Cette méthode fournit un objet Stream dans lequel vous pouvez écrire.
L'exemple ci-dessous utilise la propriété DialogResult pour obtenir le nom du fichier, et la méthode OpenFile pour l'enregistrer. La méthode OpenFile fournit un flux dans lequel vous pouvez écrire le fichier.
Dans l'exemple ci-dessous, il existe un contrôle Button avec une image qui lui a été assignée. Lorsque vous cliquez sur le bouton, un composant SaveFileDialog est instancié avec un filtre qui autorise la sélection de fichiers de type .gif, .jpeg et .bmp. Si un fichier de ce type est sélectionné dans la boîte de dialogue Enregistrer le fichier, l'image du bouton est enregistrée.
Note de sécurité Pour obtenir ou définir la propriété FileName, votre assembly doit disposer d'un niveau de privilège accordé par la classe System.Security.Permissions.FileIOPermission. Si vous exécutez le programme dans un contexte partiellement fiable, le processus peut lever une exception en raison de privilèges insuffisants. Pour plus d'informations, consultez Notions fondamentales de la sécurité d'accès du code.
Cet exemple suppose que votre formulaire contient un contrôle Button dont la propriété Image a pour valeur un fichier de type .gif, .jpeg ou .bmp.
Notes
La propriété FilterIndex (qui, en raison de l'héritage, fait partie de la classe SaveFileDialog) de la classe FileDialog utilise un index de base un. Ce point est important si vous écrivez du code pour enregistrer des données dans un format spécifique (par exemple, l'enregistrement d'un fichier en texte brut par rapport au format binaire). Cette propriété est mise en évidence dans l'exemple suivant :
Private Sub Button2_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button2.Click ' Displays a SaveFileDialog so the user can save the Image ' assigned to Button2. Dim saveFileDialog1 As New SaveFileDialog() saveFileDialog1.Filter = "JPeg Image|*.jpg|Bitmap Image|*.bmp|Gif Image|*.gif" saveFileDialog1.Title = "Save an Image File" saveFileDialog1.ShowDialog() ' If the file name is not an empty string open it for saving. If saveFileDialog1.FileName <> "" Then ' Saves the Image via a FileStream created by the OpenFile method. Dim fs As System.IO.FileStream = Ctype _ (saveFileDialog1.OpenFile(), System.IO.FileStream) ' Saves the Image in the appropriate ImageFormat based upon the ' file type selected in the dialog box. ' NOTE that the FilterIndex property is one-based. Select Case saveFileDialog1.FilterIndex Case 1 Me.button2.Image.Save(fs, _ System.Drawing.Imaging.ImageFormat.Jpeg) Case 2 Me.button2.Image.Save(fs, _ System.Drawing.Imaging.ImageFormat.Bmp) Case 3 Me.button2.Image.Save(fs, _ System.Drawing.Imaging.ImageFormat.Gif) End Select fs.Close() End If End Sub
private void button2_Click(object sender, System.EventArgs e) { // Displays a SaveFileDialog so the user can save the Image // assigned to Button2. SaveFileDialog saveFileDialog1 = new SaveFileDialog(); saveFileDialog1.Filter = "JPeg Image|*.jpg|Bitmap Image|*.bmp|Gif Image|*.gif"; saveFileDialog1.Title = "Save an Image File"; saveFileDialog1.ShowDialog(); // If the file name is not an empty string open it for saving. if(saveFileDialog1.FileName != "") { // Saves the Image via a FileStream created by the OpenFile method. System.IO.FileStream fs = (System.IO.FileStream)saveFileDialog1.OpenFile(); // Saves the Image in the appropriate ImageFormat based upon the // File type selected in the dialog box. // NOTE that the FilterIndex property is one-based. switch(saveFileDialog1.FilterIndex) { case 1 : this.button2.Image.Save(fs, System.Drawing.Imaging.ImageFormat.Jpeg); break; case 2 : this.button2.Image.Save(fs, System.Drawing.Imaging.ImageFormat.Bmp); break; case 3 : this.button2.Image.Save(fs, System.Drawing.Imaging.ImageFormat.Gif); break; } fs.Close(); } }
private: System::Void button2_Click(System::Object ^ sender, System::EventArgs ^ e) { // Displays a SaveFileDialog so the user can save the Image // assigned to Button2. SaveFileDialog ^ saveFileDialog1 = new SaveFileDialog(); saveFileDialog1->Filter = "JPeg Image|*.jpg|Bitmap Image|*.bmp|Gif Image|*.gif"; saveFileDialog1->Title = "Save an Image File"; saveFileDialog1->ShowDialog(); // If the file name is not an empty string, open it for saving. if(saveFileDialog1->FileName != "") { // Saves the Image through a FileStream created by // the OpenFile method. System::IO::FileStream ^ fs = safe_cast<System::IO::FileStream*>( saveFileDialog1->OpenFile()); // Saves the Image in the appropriate ImageFormat based on // the file type selected in the dialog box. // Note that the FilterIndex property is one based. switch(saveFileDialog1->FilterIndex) { case 1 : this->button2->Image->Save(fs, System::Drawing::Imaging::ImageFormat::Jpeg); break; case 2 : this->button2->Image->Save(fs, System::Drawing::Imaging::ImageFormat::Bmp); break; case 3 : this->button2->Image->Save(fs, System::Drawing::Imaging::ImageFormat::Gif); break; } fs->Close(); } }
(Visual C# et Visual C++) Placez le code suivant dans le constructeur du formulaire pour inscrire le gestionnaire d'événements.
this.button2.Click += new System.EventHandler(this.button2_Click);
this->button2->Click += gcnew System::EventHandler(this, &Form1::button2_Click);
Pour plus d'informations sur l'écriture de flux de fichiers, consultez FileStream.BeginWrite, méthode et FileStream.Write, méthode.
Notes
Certains contrôles, tels que RichTextBox, peuvent enregistrer des fichiers. Pour plus d'informations, consultez la section "SaveFileDialog Composant" (Composant SaveFileDialog) de l'article technique Essential Code for Windows Forms Dialog Boxes (Code essentiel pour les boîtes de dialogue de Windows Forms) dans MSDN Online Library.