Olá a todos, neste artigo irei mostrar como criar um arquivo, escrever nele e depois carrega-los em um GridView.

Vamos criar um espaço para que o usuário digite uma mensagem no seu site e ao invés de salvar as informações em um banco de dados vamos criar um arquivo e salvar a mensagem neste arquivo. Depois vamos listar todas as mensagens enviadas para você.

Utilizarei o conceito de generics também, que vocês já devem conhecer. Ok!

 

Vamos lá, crie um novo WebSite. Adicione uma nova pasta no site com o nome Mensagens para onde enviarei os arquivos com as mensagens.

 

Monte a tela da seguinte forma.

 

 

 

 

 

Código HTML do GridView

 

<asp:GridView ID="grdMsg" runat="server" AutoGenerateColumns="False" BackColor="White" BorderColor="#336666" BorderStyle="Double" BorderWidth="3px" CellPadding="4" GridLines="Horizontal" ShowHeader="False">

<FooterStyle BackColor="White" ForeColor="#333333" />

<RowStyle BackColor="White" ForeColor="#333333" />

<SelectedRowStyle BackColor="#339966" Font-Bold="True" ForeColor="White" />

<PagerStyle BackColor="#336666" ForeColor="White" HorizontalAlign="Center" />

<HeaderStyle BackColor="#336666" Font-Bold="True" ForeColor="White" />

<Columns>

            <asp:TemplateField>

                  <ItemTemplate>

                        Enviada por:

                        <%# Eval("Nome")%>

                        <br />

                        <b>

                            <%# Eval("Msg") %>

                        </b>

                        <br />

                        Data de Envio:

                        <%# Eval("DT_Envio") %>

                 </ItemTemplate>

             </asp:TemplateField>

         </Columns>

 </asp:GridView>

 

Vamos criar uma classe Mensagem. Segue:

 

using System;

 

/// <summary>

/// Summary description for Mensagem

/// </summary>

public class Mensagem

{

      public Mensagem()

      {

      }

 

    private string nome;

    private string msg;

    private DateTime dtEnvio;

 

    public string Nome

    {

        get { return nome; }

        set { nome = value; }

    }

      

    public string Mensagem

    {

        get { return msg; }

        set { msg = value; }

    }

 

    public DateTime DT_Envio

    {

        get { return dtEnvio; }

        set { dtEnvio = value; }

    }

}

 

Após criar o objeto vamos criar os métodos para salvar a mensagem.

 

Método que recebe um objeto do tipo Mensagem, cria o arquivo armazena as informações nele

e salva na pasta que criamos chamada Mensagens.

 

private void AddMensagem(Mensagem msg)

    {

        // Variável que recebe o caminho da pasta Mensagem no servidor

        string pastNome = Server.MapPath("Mensagens");

 

        // Para darmos o nome do arquivo vamos utilizar a

        // propriedade Ticks da hora atual mais a classe

        // Random que irá pegar números aleatórios até 100.

        Random random = new Random();

        string fileName = pastNome + @"\";

  fileName += DateTime.Now.Ticks.ToString() + random.Next(100).ToString();

      

        // Cria o arquivo

        FileInfo newFile = new FileInfo(fileName);

       

        // Para escrever no arquivo vamos utilizar

        // a classe StreamWriter

        StreamWriter w = newFile.CreateText();

 

        // Neste momento vamos escrever as informações da

        // mensagem no arquivo

        w.WriteLine(msg.Nome);

        w.WriteLine(msg.DT_Envio.ToString());

        w.WriteLine(msg.Msg);

        w.Flush();

        w.Close();

    }

 

 

Agora vamos fazer o método do botão Enviar que irá criar uma mensagem

e passar como parâmetro do método AddMensagem.

 

protected void btnEnviar_Click(object sender, EventArgs e)

    {

        // Cria um novo objeto Mensagem

        Mensagem msg = new Mensagem();

 

        // Add os valores digitados ao objeto

        msg.Nome = txtNome.Text;

        msg.DT_Envio = DateTime.Now;

        msg.Msg = txtMsg.Text;

 

        // Chama o método para salvar a mensagem

        AddMensagem(msg);

 

    }

 

Após Salvar a mensagem vamos criar os métodos para trazer todas as

mensagens e listá-las no grdMsg.

 

Agora nós vamos ter que abrir todos os arquivos le as informações

contidas nele e transformá-lo em um objeto do tipo Mensagem e para isso

vamos utilizar o seguinte método que recebe o arquivo e retorna a Mensagem:

 

private Mensagem GetMsgToFile(FileInfo fileItem)

    {

        // Cria um objeto Mensagem

        Mensagem msg = new Mensagem();

 

        // Utilizaremos a classe StreamReader para ler as informações

        // contidas no arquivo

        StreamReader r = fileItem.OpenText();

       

        // Lendo linha por linha e adicionando no objeto.

        msg.Nome = r.ReadLine();

        msg.DT_Envio = DateTime.Parse(r.ReadLine());

        msg.Msg = r.ReadLine();

        r.Close();

 

        // Retornando a mensagem preenchida

        return msg;

    }

 

 

 

Como falei no início do artigo nós iríamos utilizar Generics e para isso

vamos criar um método GetAllMensagens que irá retorar uma List que só

contem objetos do tipo Mensagem, para isso não se esqueça de fazer

referência ao using System.Collections.Generic;

 

Segue:

 

private List<Mensagem> GetAllMensagens()

    {

        // Variável que recebe o caminho da pasta Mensagem no servidor

        string pastNome = Server.MapPath("Mensagens");

 

        // Cria uma List de Mensagens

        List<Mensagem> _listMsg = new List<Mensagem>();

       

        // Variável de informações do diretório passado como parâmetro

  // que nesse caso estamos passando o caminho da pasta

  // onde conte as mensagens

        DirectoryInfo dirInfMsg = new DirectoryInfo(pastNome);

 

        // O método GetFiles retorna um array de FileInfo e dessa forma

        // podemos percorrer todos os arquivos do diretório

        foreach (FileInfo fileItem in dirInfMsg.GetFiles())

        {

            // Adicionando o

            _listMsg.Add(GetMsgToFile(fileItem));

        }

 

        // Retorna a List de Mensagens

        return _listMsg;

    }

 

Para finalizar vamos criar o método do LinkButton para listar as

mensagens no grid utilizando os métodos que nós acabamos de criar.

 

 

protected void listMsg_Click(object sender, EventArgs e)

    {

        // Atribui ao DataSource do Grid a List de Mensagem

        this.grdMsg.DataSource = GetAllMensagens();

        this.grdMsg.DataBind();

    }

 

Execute e aplicação, você deverá ter a seguinte tela:

 

 

 

Finalizando...

 

Neste artigo aprendemos como utilizar as classes DirectoryInfo, FileInfo, StreamWriter e StreamReader para manipulação de arquivos e diretórios e como utilizá-los para criar um post de mensagens sem armazena-lás no banco.

 

Espero ter ajudado e qualquer sujestões ou dúvidas segue email: ebenezer05@gmail.com

 

Abraços...