如何:使用 SaveFileDialog 组件保存文件

更新:2007 年 11 月

用户可以使用 SaveFileDialog 组件浏览文件系统并选择要保存的文件。该对话框返回用户在对话框中选定的文件的路径和名称。不过,您必须编写代码才能真正地将文件写入磁盘。

使用 SaveFileDialog 组件保存文件

  • 显示“保存文件”对话框并调用一个方法保存用户选定的文件。

    使用 SaveFileDialog 组件的 OpenFile 方法保存文件。此方法提供了一个可以写入的 Stream 对象。

    下面的示例使用 DialogResult 属性获取文件的名称,并使用 OpenFile 方法保存文件。OpenFile 方法提供了可以写入文件的流。

    在下面的示例中,有一个分配了图像的 Button 控件。单击该按钮时,将使用一个允许 .gif、.jpeg 和 .bmp 类型文件的筛选器实例化 SaveFileDialog 组件。如果在“保存文件”对话框中选定了此类型的文件,那么将保存按钮的图像。

    安全说明:

    若要获取或设置 FileName 属性,程序集需要具有由 System.Security.Permissions.FileIOPermission 类授予的特权级别。如果在部分信任的上下文中运行,则该进程可能会因特权不足而引发一个异常。有关更多信息,请参见代码访问安全性基础知识

    该示例假设窗体上有一个 Button 控件,该控件的 Image 属性设置为 .gif、.jpeg 或 .bmp 类型的文件。

    说明:

    FileDialog 类的 FilterIndex 属性(根据继承的特性,该属性属于 SaveFileDialog 类)使用从 1 开始的索引。如果您通过编写代码以特定格式保存数据(例如,以纯文本而不是二进制格式保存文件),那么这一点很重要。以下示例介绍了该属性。

    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 控件,具有保存文件的能力。有关更多信息,请参见 MSDN 联机库技术文章 Essential Code for Windows Forms Dialog Boxes(Windows 窗体对话框的基本代码)的“SaveFileDialog Component”(SaveFileDialog 组件)部分。

请参见

参考

SaveFileDialog

其他资源

SaveFileDialog 组件(Windows 窗体)