Porady: zapisywanie plików za pomocą składnika SaveFileDialog
Składnik SaveFileDialog umożliwia użytkownikom przeglądanie systemu plików i wybieranie plików do zapisania. Okno dialogowe zwraca ścieżkę i nazwę pliku wybranego przez użytkownika w oknie dialogowym. Należy jednak napisać kod, aby rzeczywiście zapisać pliki na dysku.
Aby zapisać plik przy użyciu składnika SaveFileDialog
Wyświetl okno dialogowe Zapisywanie pliku i wywołaj metodę w celu zapisania pliku wybranego przez użytkownika.
SaveFileDialog Użyj metody składnikaOpenFile, aby zapisać plik. Ta metoda daje Stream obiekt, do którego można napisać.
W poniższym przykładzie użyto DialogResult właściwości , aby uzyskać nazwę pliku i OpenFile metodę zapisywania pliku. Metoda OpenFile umożliwia zapisanie pliku w strumieniu.
W poniższym przykładzie istnieje kontrolka Button z przypisanym do niego obrazem. Po kliknięciu przycisku składnik jest tworzone za pomocą filtru, SaveFileDialog który zezwala na pliki typu .gif, .jpeg i .bmp. Jeśli plik tego typu zostanie wybrany w oknie dialogowym Zapisywanie pliku, obraz przycisku zostanie zapisany.
Ważne
Aby uzyskać lub ustawić FileName właściwość, zestaw wymaga poziomu uprawnień przyznanego przez klasę System.Security.Permissions.FileIOPermission . Jeśli korzystasz z kontekstu częściowego zaufania, proces może zgłosić wyjątek z powodu niewystarczających uprawnień. Aby uzyskać więcej informacji, zobacz Code Access Security Basics (Podstawy zabezpieczeń dostępu do kodu).
W przykładzie przyjęto założenie, że formularz ma kontrolkę Button z jej Image właściwością ustawioną na plik typu .gif, .jpeg lub .bmp.
Uwaga
Właściwość FileDialog klasy FilterIndex (która ze względu na dziedziczenie jest częścią SaveFileDialog klasy) używa jedno opartego indeksu. Jest to ważne, jeśli piszesz kod do zapisywania danych w określonym formacie (na przykład zapisywanie pliku w formacie zwykłego tekstu i formatu binarnego). Ta właściwość jest opisywana w poniższym przykładzie.
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# i Visual C++) Umieść następujący kod w konstruktorze formularza, aby zarejestrować procedurę obsługi zdarzeń.
this.button2.Click += new System.EventHandler(this.button2_Click);
this->button2->Click += gcnew System::EventHandler(this, &Form1::button2_Click);
Aby uzyskać więcej informacji na temat pisania strumieni plików, zobacz BeginWrite i Write.
Uwaga
Niektóre kontrolki, takie jak kontrolka, mają możliwość zapisywania RichTextBox plików.
Zobacz też
.NET Desktop feedback