Vorgehensweise: Speichern von Dateien mit der SaveFileDialog-Komponente
Mit der SaveFileDialog-Komponente können Benutzer das Dateisystem durchsuchen und Dateien auswählen, die gespeichert werden sollen. Das Dialogfeld gibt den Pfad und den Namen der ausgewählten Datei zurück. Sie müssen jedoch den Code schreiben, mit dem die Dateien letztendlich auf den Datenträger geschrieben werden.
So speichern Sie eine Datei mit der SaveFileDialog-Komponente
Zeigen Sie das Dialogfeld Datei öffnen an, und rufen Sie eine Methode zum Öffnen der vom Benutzer ausgewählten Datei auf.
Verwenden Sie die Methode der KomponenteSaveFileDialog, um die OpenFile Datei zu speichern. Durch diese Methode erhalten Sie ein Stream-Objekt, in das Sie schreiben können.
Das folgende Beispiel verwendet die DialogResult-Eigenschaft, um den Namen der Datei abzurufen, und die OpenFile-Methode, um die Datei zu speichern. Die OpenFile-Methode gibt Ihnen einen Stream, in den Sie die Datei schreiben können.
Das nachfolgende Beispiel enthält ein Button-Steuerelement, dem ein Bild zugewiesen wurde. Wenn Sie auf die Schaltfläche klicken, wird eine SaveFileDialog-Komponente mit einem Filter instanziiert, der nur Dateien vom Typ GIF, JPEG und BMP zulässt. Wenn eine Datei diesen Typs im Dialogfeld „Datei speichern“ ausgewählt wird, wird das Bild der Schaltfläche gespeichert.
Wichtig
Um die FileName-Eigenschaft zu erhalten oder zu setzen, benötigt Ihre Assembly eine von der System.Security.Permissions.FileIOPermission-Klasse gewährte Berechtigungsstufe. Wenn Sie in einem teilweise vertrauenswürdigen Kontext arbeiten, kann der Vorgang möglicherweise aufgrund fehlender Berechtigungen eine Ausnahme auslösen. Weitere Informationen finden Sie unter Code Access Security Basics.
Das Beispiel geht davon aus, dass Ihr Formular ein Button-Steuerelement enthält, dessen Image-Eigenschaft auf eine Datei des Typs .gif, .jpeg oder .bmp eingestellt ist.
Hinweis
Die FilterIndex-Eigenschaft der FileDialog-Klasse (die aufgrund der Vererbung Teil der SaveFileDialog-Klasse ist) verwendet einen einstelligen Index. Dies ist von Bedeutung, wenn Sie Code zum Speichern von Daten in einem bestimmten Format schreiben (z. B. Speichern einer Datei im Nur-Text-Format statt im Binärformat). Diese Eigenschaft ist im nachfolgenden Beispiel enthalten.
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# und Visual C++) Fügen Sie folgenden Code in den Konstruktor des Formulars ein, um den Ereignishandler zu registrieren.
this.button2.Click += new System.EventHandler(this.button2_Click);
this->button2->Click += gcnew System::EventHandler(this, &Form1::button2_Click);
Weitere Informationen zum Schreiben von Dateidatenströme finden Sie unter BeginWrite und Write.
Hinweis
Bestimmte Steuerelemente, wie z. B. das RichTextBox-Steuerelement, haben die Möglichkeit, Dateien zu speichern.
Weitere Informationen
.NET Desktop feedback