Udostępnij za pośrednictwem


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ż