Salvando arquivos e carregando com Open e Save Dialog

Usando a classe SaveFileDialog e OpenfileDialog, podemos abrir um caixa de dialogo para carregar e salvar arquivos.

 Escrevendo testes automatizados com PHPUnit

É normal em sistemas que geram algum tipo de relatório ou informação na qual precisamos de uma opção para salvar estes dados, ou um sistema que precisa abrir um arquivo para fazer algumas leituras para executar determinadas tarefas.

Nesta matéria vamos criar um simples projeto que tem como objetivo salvar o conteúdo de um Rich Textbox e carregar as mesmas informações.

Vamos usar dois componentes que é o SaveFileDialog e OpenfileDialog, ambos só retornam o diretório que será executado uma ação, no Save retorna o diretório que o arquivo será salvo e no Open retorna o diretório que será aberto.

É recomendável que leia esta matéria, https://satellasoft.com/artigo/csharp/gravando-e-lendo-dados-em-arquivo-texto-com-csharp/amp, vamos usar o StreamWriter e StreamReader neste projeto.

Para começar crie um novo formulário, insira dois Button, um RichTextBox, SaveFileDialog, OpenFileDialog, renomeie através da propriedade name de cada objeto como mostrado abaixo.

Nome Objeto
rtbTexto RichTextBox
btnSalvar Button1
btnCarregar Button2
sfdSalvar SaveFileDialog
oflAbrir  OpenFileDialog

 

Altere o formulário como você preferir, insira um nome, título, renomeie os botões, faça o que desejar, um exemplo é mostrado abaixo.

Agora vamos programar, depois que nossa classe for instanciada, declare duas variáveis do tipo String com os nomes dirSalvar e dirAbrir, estas variáveis serão responsáveis por armazenar os caminhos que vamos gravar e abrir.

Código 01:

 string dirSalvar; // Variável que armazena diretório com arquivo e extensão a ser salvo.
 string dirAbrir; // Variável que armazena diretório com arquivo e extensão a ser carregado.

Agora de um duplo clique no botão btnSalvar e insira o código abaixo, leia atentamente os comentários, é muito simples de se entender, se você conhece o StreamWriter e StreamReader vai ser mais fácil ainda.

Código 02:

sfdSalvar.Title = "Salvar Documento"; //Adicionamos um titulo a janela de salvar
            sfdSalvar.Filter = "TXT (.txt) | *.txt | HTML (.html) |*.html"; //Adicionamos as extensões que serão salvas, .txt e .html

            if (sfdSalvar.ShowDialog() == DialogResult.OK)
                /* Se o resultado da caixa de dialogo for igual a Ok, retorna true e entra no IF
                 */
            {
                dirSalvar = sfdSalvar.FileName;//FileName retorna o diretório, este valor adicionamos dentro da variável dirSalvar (c:/index.html, c:/texto.txt).

                StreamWriter streamWriter = new StreamWriter(dirSalvar); //Instanciamos um novo objeto para escrita, passamos o diretório e arquivo que será escrito.
                streamWriter.Write(rtbTexto.Text); // Gravamos o valor no arquivo.
                streamWriter.Close(); // Fechamos a conexão com o arquivo.
            }
Agora de um duplo clique no botão btnAbrir, a lógica segue a mesma do btnSalvar, porém usamos o StreamReader para ler nosso diretório.

Código 03:

            /* Para o Open File Dialog segue o mesmo paradigma acima, o que muda é que não escrevemos com o StreaWriter e sim carregamos com o StreamReader.
             */
            ofdAbrir.Title = "Procurar Arquivo";
            ofdAbrir.Filter = "All (*.*) | *.*";

            if (ofdAbrir.ShowDialog() == DialogResult.OK)
            {
                dirAbrir = ofdAbrir.FileName;

                StreamReader streamReader = new StreamReader(dirAbrir);
                rtbTexto.Text = streamReader.ReadLine();
                streamReader.Close();
            }

Nosso sistema já está salvando e lendo arquivos, abaixo um Print do resultado final.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
using System.IO;
 
namespace saveOpenDialog
{
    public partial class frmPrincipal : Form
    {
        string dirSalvar; // Variável que armazena diretório com arquivo e extensão a ser salvo.
        string dirAbrir; // Variável que armazena diretório com arquivo e extensão a ser carregado.
        public frmPrincipal()
        {
            InitializeComponent();
        }
 
        private void label1_Click(object sender, EventArgs e)
        {
            Process.Start("http://www.satellasoft.com");
        }
 
        private void btnSalvar_Click(object sender, EventArgs e)
        {
             
            sfdSalvar.Title = "Salvar Documento"; //Adicionamos um titulo a janela de salvar
            sfdSalvar.Filter = "TXT (.txt) | *.txt | HTML (.html) |*.html"; //Adicionamos as extensões que serão salvas, .txt e .html
 
            if (sfdSalvar.ShowDialog() == DialogResult.OK)
                /* Se o resultado da caixa de dialogo for igual a Ok, retorna true e entra no IF
                 */
            {
                dirSalvar = sfdSalvar.FileName;//FileName retorna o diretório, este valor adicionamos dentro da variável dirSalvar (c:/index.html, c:/texto.txt).
 
                StreamWriter streamWriter = new StreamWriter(dirSalvar); //Instanciamos um novo objeto para escrita, passamos o diretório e arquivo que será escrito.
                streamWriter.Write(rtbTexto.Text); // Gravamos o valor no arquivo.
                streamWriter.Close(); // Fechamos a conexão com o arquivo.
            }
 
        }
 
        private void btnAbrir_Click(object sender, EventArgs e)
        {
            /* Para o Open File Dialog segue o mesmo paradigma acima, o que muda é que não escrevemos com o StreaWriter e sim carregamos com o StreamReader.
             */
            ofdAbrir.Title = "Procurar Arquivo";
            ofdAbrir.Filter = "All (*.*) | *.*";
 
            if (ofdAbrir.ShowDialog() == DialogResult.OK)
            {
                dirAbrir = ofdAbrir.FileName;
 
                StreamReader streamReader = new StreamReader(dirAbrir);
                rtbTexto.Text = streamReader.ReadLine();
                streamReader.Close();
            }
 
  
        }
    }
}