Udostępnij przez


Instrukcje: zapisywanie plików przy użyciu 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 Zapisz plik i wywołaj metodę, aby zapisać plik wybrany przez użytkownika.

    Użyj metody SaveFileDialog składnika OpenFile, aby zapisać plik. Ta metoda udostępnia obiekt Stream, do którego można napisać.

    W poniższym przykładzie użyto właściwości DialogResult w celu pobrania nazwy pliku oraz metody OpenFile w celu zapisania pliku. Metoda OpenFile udostępnia strumień do zapisania pliku.

    W poniższym przykładzie istnieje kontrolka Button z przypisanym do niego obrazem. Po kliknięciu przycisku składnik SaveFileDialog jest tworzony z filtrem, który umożliwia 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ć właściwość FileName, 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 Podstawy Bezpieczeństwa Dostępu do Kodów.

    W przykładzie przyjęto założenie, że formularz ma kontrolkę Button z właściwością Image ustawioną na plik typu .gif, .jpeg lub .bmp.

    Uwaga / Notatka

    Właściwość FileDialog klasy FilterIndex (która ze względu na dziedziczenie jest częścią klasy SaveFileDialog) używa indeksu bazującego na jedynce. 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 / Notatka

    Niektóre kontrolki, takie jak kontrolka RichTextBox, mają możliwość zapisywania plików.

Zobacz także