Salvando arquivos e carregando com Open e Save Dialog

Gunnar CorreaGunnar Correa11/03/2015 às 08:45:13 - 6.999 acessos

Nesta matéria você vai aprender a salvar um texto com SaveFileDialog e OpenfileDialog.


É 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, http://www.satellasoft.com/materia/gravando-e-lendo-dados-em-arquivo-texto-com-csharp, 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.

Espero que tenham aprendido, qualquer dúvida deixem nos comentários.

Código 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();
            }

 
        }
    }
}

 


SaveFileDialog OpenfileDialog Editor Csharp Programação Microsoft Visual Studio Componentes

Compartilhe


Gunnar Correa

Gunnar Correa

Autodidata, Graduado em Desenvolvimento Web (FIPP), Especialista em Tecnologias na Educação (Unoeste) e Pós-graduando em Segurança da Informação (Universidade Cruzeiro do Sul). Começou seus estudos na área de programação quando era criança, e atualmente está estudando desenvolvimento de jogos. É CEO do portal SatellaSoft, criado em 2009 com o intuito de compartilhar conhecimento de forma gratuita e inédita.



Site atualizado

Olá, nosso site recebeu uma nova atualização e por conta disso, alguns artigos ainda estão sendo atualizados. Dependendo do conteúdo que você procura, poderá encontrar imagens e trechos de códigos mal formatados.

Estamos trabalhando para normalizar todos os conteúdos, muito em breve, esse problema não mais existirá.


Comentários