Практическое руководство. Сохранение файлов с помощью компонента SaveFileDialog
Обновлен: Ноябрь 2007
Компонент SaveFileDialog позволяет пользователям просматривать файловую систему и выбирать файлы для сохранения. Диалоговое окно возвращает путь и имя файла, который был выбран пользователем. Однако для сохранения файла на диск необходимо написать код.
Чтобы сохранить файл с помощью компонента SaveFileDialog
Отобразите диалоговое окно "Сохранение файла" и вызовите метод, чтобы сохранить файл, выбранный пользователем.
Чтобы сохранить файл, вызовите метод OpenFile компонента SaveFileDialog. С помощью этого метода получите объект Stream, в который можно произвести запись.
В примере, представленном ниже, свойство DialogResult используется для получения имени файла, а метод OpenFile — для сохранения файла. Метод OpenFile предоставляет поток, в который производится запись файла.
В примере, представленном ниже, используется элемент управления Button с присоединенным к нему изображением. Когда пользователь нажимает кнопку, открывается экземпляр компонента SaveFileDialog, с помощью которого можно выбрать следующие типы файлов: GIF, JPEG и BMP. Если в диалоговом окне "Сохранение файла" выбран файл какого-либо из этих типов, изображение кнопки сохраняется.
Примечание о безопасности. Чтобы получить или задать свойство FileName, сборка требует уровня привилегий, предоставляемых классом System.Security.Permissions.FileIOPermission. Если процесс выполняется в контексте с частичным доверием, он может сгенерировать исключение из-за недостатка привилегий. Дополнительные сведения можно найти в разделе Основы безопасности управления доступом для кода.
В примере предполагается, что в форме существует элемент управления Button со свойством Image, в качестве значения которого можно использовать определенные типы файлов (GIF, JPEG и BMP).
Примечание. Свойство FilterIndex класса FileDialog (которое в результате наследования является частью класса SaveFileDialog) использует индекс, начинающийся с единицы. Очень важно при написании кода сохранять данные в определенном формате (например, сохранять файл в формате простого текста, а не в двоичном). Это свойство представлено в следующем примере.
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 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.set_Filter("JPeg Image|*.jpg|Bitmap Image|*.bmp|Gif Image|*.gif"); saveFileDialog1.set_Title("Save an Image File"); saveFileDialog1.ShowDialog(); // If the file name is not an empty string open it for saving. if (saveFileDialog1.get_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.get_FilterIndex()) { case 1: this.button2.get_Image().Save(fs, System.Drawing.Imaging.ImageFormat.get_Jpeg()); break; case 2: this.button2.get_Image().Save(fs, System.Drawing.Imaging.ImageFormat.get_Bmp()); break; case 3: this.button2.get_Image().Save(fs, System.Drawing.Imaging.ImageFormat.get_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#, Visual J# и Visual C++) Добавьте в конструктор формы следующий код, чтобы зарегистрировать обработчик событий.
this.button2.Click += new System.EventHandler(this.button2_Click);
this.button2.add_Click(new System.EventHandler(this.button2_Click));
this->button2->Click += gcnew System::EventHandler(this, &Form1::button2_Click);
Дополнительные сведения о записи файловых потоков можно найти в разделах Метод FileStream.BeginWrite и Метод FileStream.Write.
Примечание. Определенные элементы управления, например элемент управления RichTextBox, могут сохранять файлы. Дополнительные сведения можно найти в разделе "Компонент SaveFileDialog" технической статьи Основной код для диалоговых окон Windows Forms библиотеки MSDN Online.