Olá a todos, neste artigo irei mostrar como criar um arquivo, escrever nele e depois carrega-los
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
{
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...