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...