C# - Usando o controle SaveDialog


A classe SaveFileDialog permite que os usuários naveguem no sistema de arquivos e selecionem os arquivos a serem salvos. 

Essa classe pode abrir e substituir um arquivo existente ou criar um novo arquivo.

A maioria da funcionalidade para esta classe é encontrada na classe FileDialog.

A figura abaixo exibe a imagem da ToolBox destacando a aba Dialogs onde se encontram os controles de diálogos, e , dentre eles vemos o SaveFileDialog :

Abaixo vemos o controle SaveFileDialog em ação, onde observamos características idênticas ao Windows Explorer como a navegação pelos arquivos e sua seleção:

A caixa de diálogo retorna o caminho e o nome do arquivo que o usuário selecionou na caixa de diálogo. No entanto, você deve escrever o código para gravar os arquivos no disco.

Como salvar um arquivo usando o SaveFileDialog :

  1. Exiba a caixa de diálogo Salvar Arquivo e chame um método para salvar o arquivo selecionado pelo usuário (A propriedade FileName retorna o nome do arquivo selecionado);
  2. Use o método OpenFile do componente SaveFileDialog para salvar o arquivo;
  3. Este método oferece a você um objeto Stream para o qual você pode gravar o arquivo;

Nota: A seguir um exemplo usando o método OpenFile para salvar o arquivo:

private void button1_Click(object sender, System.EventArgs e)
{
     Stream myStream ;
     SaveFileDialog saveFileDialog1 = new SaveFileDialog();
     saveFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*"  ;
     saveFileDialog1.FilterIndex = 2 ;
     saveFileDialog1.RestoreDirectory = true ;
     if(saveFileDialog1.ShowDialog() == DialogResult.OK)
     {
         if((myStream = saveFileDialog1.OpenFile()) != null)
         {
             //codigo para escrever o stream
             myStream.Close();
         }
     }
 }

Criando um SaveFileDialog

Podemos criar um controle SaveFileDialog em tempo de projeto arrastando o controle da caixa de ferramentas(ToolBox) e soltando no formulário Windows Forms.

Ao concluir esta tarefa veremos o controle ser exibido com o nome padrão na base do formulário, e, se pressionarmos F4 veremos também a janela de propriedades do controle onde podemos definir diversas propriedades para o controle:

Na linguagem C# ao incluir o controle no formulário será incluída de forma automática duas linhas de código no projeto na seção #region Windows Form Designer generated code no interior da rotina private void InitializeComponent() :

this.saveFileDialog1 = new System.Windows.Forms.SaveFileDialog();
this.saveFileDialog1.FileName = "saveFileDialog1";

Para criar um controle SaveFileDialog em tempo de execução usando C# basta criar uma instância da classe SaveFileDialog e definir suas propriedades:

O método ShowDialog() é quem exibe a janela do controle para seleção do caminho e nome do arquivo:

saveFileDialog1.ShowDialog();
 
O código abaixo é suficiente para criar e abrir a janela de diálogo do controle saveFileDialog():

Usamos a propriedade DialogResult para obter o resultado do fechamento da janela de diálogo.

Os valores disponíveis na enumeração DialogResult são:

Cancel A caixa de diálogo retorna o valor Cancel (normalmente enviado de um botão rotulado como ' Cancelar ').
Ignore A caixa de diálogo retorna o valor Ignore (normalmente enviado a partir de um botão rotulado ignorar).
No A caixa de diálogo retorna o valor No (normalmente enviado a partir de um botão rotulado 'Não').
None Nothing é retornado pelo formulário da caixa de diálogo. Isso significa que a caixa de diálogo modal continua em execução.
OK O valor do retorno do dialog box OK (normalmente enviado por um botão com etiqueta OK).
Retry A caixa de diálogo retorna o valor Retry (normalmente enviado de um botão rotulado como ' Repetir ').
Yes A caixa de diálogo retorna o valor Yes (normalmente enviado de um botão rotulado como 'Sim').

Se um arquivo for selecionado e o botão Salvar for clicado estamos exibindo o nome do arquivo usando a propriedade FileName.

Abaixo vemos o código onde exibimos uma mensagem ao usuário quando o botão Cancelar foi clicado:

As principais propriedades do controle SaveDialogBox são:

AddExtension Obtém ou define um valor indicando se a caixa de diálogo irá adicionar automaticamente uma extensão para um nome de arquivo se o usuário omitir a extensão. (Herdado de FileDialog.)
CheckFileExists Obtém ou define um valor que indica se a caixa de diálogo exibe um aviso se o usuário especificar um nome de arquivo que não existe. (Herdado de FileDialog.)
CheckPathExists Obtém ou define um valor que indica se a caixa de diálogo exibe um aviso se o usuário especificar um caminho que não existe. (Herdado de FileDialog.)
DefaultExt Obtém ou define a extensão de nome de arquivo padrão. (Herdado de FileDialog.)
FileName Obtém ou define uma seqüência de caracteres que contém o nome do arquivo selecionado na caixa de diálogo de arquivo. (Herdado de FileDialog.)
FileNames Obtém os nomes de arquivo de todos os arquivos selecionados na caixa de diálogo. (Herdado de FileDialog.)
Filter Obtém ou define a string de filtro para o nome atual, que determina as opções que aparecem em "Salvar como tipo de arquivo" ou "Arquivos do tipo" caixa na caixa de diálogo. (Herdado de FileDialog.)
FilterIndex Obtém ou define o índice do filtro atualmente selecionado na caixa de diálogo de arquivo. (Herdado de FileDialog.)
InitialDirectory Obtém ou define o diretório inicial exibido pela caixa de diálogo de arquivo. (Herdado de FileDialog.)
RestoreDirectory Obtém ou define um valor indicando se a caixa de diálogo restaura o diretório atual antes de fechar. (Herdado de FileDialog.)
ShowHelp Obtém ou define um valor indicando se o botão de Ajuda é exibido na caixa de diálogo de arquivo. (Herdado de FileDialog.)
Title Obtém ou define o título da caixa de diálogo de arquivo. (Herdado de FileDialog.)

Os eventos disponíveis para o controle SaveDialogBox são:

Disposed Ocorre quando o componente é descartado por uma chamada do método Dispose. (Herdado de Component.)
FileOk Ocorre quando o usuário clica no botão Abrir ou Salvar em uma caixa de diálogo de arquivo. (Herdado de FileDialog.)
HelpRequest Ocorre quando o usuário clica no botão de Ajuda em uma caixa de diálogo comum. (Herdado de CommonDialog.)

Podemos usar o evento FileOk para tratar a seleção do usuário quando o botão Abrir ou Salvar for clicado:

private void button1_Click(object sender, EventArgs e)
{
    // abre uma janela de dialógo Salvar Arquivo
     saveFileDialog1.ShowDialog();
}

//usando o evento FileOK para tratar a opção Salvar da caixa de diálogo
private void saveFileDialog1_FileOk(object sender, CancelEventArgs e)
{
        //pega o nome do arquivo
        string name = saveFileDialog1.FileName;
        File.WriteAllText(name, "test");
}

Exemplos usando SaveFileDialog

Abra o Visual Studio 2012 for Windows Desktop e crie um novo projeto usando o modelo Windows Forms Application com o nome SaveFIleDialogDemo;

Menu File->New Project -> Windows Forms Application , Name = OpenFileDialogDemo;

No formulário padrão form1.cs inclua a partir da ToolBox os seguintes controles:

Defina o seguinte leiaute no formulário form1.cs:

A seguir inclua o seguinte código no formulário:

using System;
using System.Windows.Forms;
using System.IO;

namespace SaveDialogBox_CSharp
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        private void btnSalvar_Click(object sender, EventArgs e)
        {
            //verifica se existe algo digitado na caixa de texto
            if (string.IsNullOrEmpty(txtTexto.Text))
            {
                MessageBox.Show("Informe algo na caixa de texto");
                return;
            }

            //define o titulo
            saveFileDialog1.Title = "Salvar Arquivo Texto";
            //Define as extensões permitidas
            saveFileDialog1.Filter = "Text File|.txt";
            //define o indice do filtro
            saveFileDialog1.FilterIndex = 0 ;
            //Atribui um valor vazio ao nome do arquivo
            saveFileDialog1.FileName = "Mac_" +  DateTime.Now.ToString("ddMMyyyy_HHmmss");
            //Define a extensão padrão como .txt
            saveFileDialog1.DefaultExt = ".txt";
            //define o diretório padrão
            saveFileDialog1.InitialDirectory = @"c:\dados";
            //restaura o diretorio atual antes de fechar a janela
            saveFileDialog1.RestoreDirectory = true;

            //Abre a caixa de dialogo e determina qual botão foi pressionado
            DialogResult resultado = saveFileDialog1.ShowDialog();

            //Se o ousuário pressionar o botão Salvar
            if (resultado == DialogResult.OK)
            {
                //Cria um stream usando o nome do arquivo
                FileStream fs = new FileStream(saveFileDialog1.FileName, FileMode.Create);

                //Cria um escrito que irá escrever no stream
                StreamWriter writer = new StreamWriter(fs);
                //escreve o conteúdo da caixa de texto no stream
                writer.Write(txtTexto.Text);
                //fecha o escrito e o stream
                writer.Close();
            }
            else
            {
                //exibe mensagem informando que a operação foi cancelada
                MessageBox.Show("Operação cancelada");
            }
        }
    }
}

O código já esta comentado e basicamente salva o conteúdo digitado na caixa de texto txtTexto usando o SaveDialog para abrir uma caixa de diálogo Salvar Como;

O  nome do arquivo apresentando é definido pelo código: saveFileDialog1.FileName = "Mac_" + DateTime.Now.ToString("ddMMyyyy_HHmmss");

A figura a seguir mostra a caixa de diálogo sendo apresentada:

Se clicar no botão Salvar será criado um stream com o nome do arquivo no modo Create usando a enumeração FileMode, especifica como o sistema operacional deve abrir um arquivo. O modo Create especifica que o sistema operacional deve criar um novo arquivo. Se o arquivo já existir, ele será substituído.

       if (resultado == DialogResult.OK)
       {
                //Cria um stream usando o nome do arquivo
                FileStream fs = new FileStream(saveFileDialog1.FileName, FileMode.Create);

                //Cria um escrito que irá escrever no stream
                StreamWriter writer = new StreamWriter(fs);
                //escreve o conteúdo da caixa de texto no stream
                writer.Write(txtTexto.Text);
                //fecha o escrito e o stream
                writer.Close();
        }

A seguir criamos uma instância de StreamWriter() para escrever o texto no arquivo.

Se o usuário clicar no botão Cancelar será exibida a mensagem de que a operação foi canceladas.

Assim destacamos como usar o controle SaveFileDialog que é muito útil e versátil na linguagem C# (e também na VB .NET)

Pegue o projeto completo aqui:  SaveDialogBox_CSharp.zip

Gálatas 1:11 Mas faço-vos saber, irmãos, que o evangelho que por mim foi anunciado não é segundo os homens;

Gálatas 1:12 porque não o recebi de homem algum, nem me foi ensinado; mas o recebi por revelação de Jesus Cristo.

Veja os Destaques e novidades do SUPER DVD Visual Basic  (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Veja mais sistemas completos para a plataforma .NET no Super DVD .NET , confira...

Quer aprender C# ??

Chegou o Super DVD C#  com exclusivo material de suporte e vídeo aulas com curso básico sobre C#.

Veja também os Cursos com vídeo aulas e projetos exemplos:

    Gostou ?   Compartilhe no Facebook    Compartilhe no Twitter 
Referências:

José Carlos Macoratti