ASP .NET - Lendo e escrevendo em arquivos texto


Podemos ler e fazer alterações em arquivos texto usando uma das muitas classes da .NET Framework. Estou falando das classes : StreamWriter e StreamReader.

A classe StreamWriter implementa um TextWriter(um escritor que pode escrever uma série sequencial de caracter) para escrever para um fluxo de dados. Ela é especializada para a saída de caracteres em um modo de codificação particular. Os principais membros desta classe são :

Close Fecha o StreamWriter atual e o stream correspondente.
CreateObjRef (herdado de MarshalByRefObject) Cria um objeto que contem todas as informações necessárias para gerar o proxy usado para se comunicar cum objeto remoto.
Equals (herdado de Object) Determina se duas instâncias de um objeto são iguais.
Flush Limpa todo o buffer do writer atual e de todos os fluxos correspondentes.
GetType (herdado de Object) Obtem o tipo da instância atual.
ToString (herdado de Object) Retorna uma String que representa o objeto atual.
Write Escreve para o stream.(fluxo)
WriteLine (herdado de TextWriter) Escreve os dados seguido por um terminador de linha.
NewLine (herdado de TextWriter) Obtem ou define o terminador de linha usado pelo TextWriter atual.

A classe StreamReader implementa um TextReader que lê caracteres de um fluxo de byte em uma codificação particular.

Seus principais membros são:

Read Lê o próximo caractere ou conjunto de caracteres de um fluxo de entrada.
ReadBlock (herdado de TextReader) Lê um máximo de caracteres do fluxo atual e escreve os dados para o buffer..
ReadLine Lê uma linha de caracteres de um fluxo atual e retorna os dados como string.
ReadToEnd Lê o fluxo da posição atual até o fim do fluxo.

Nosso exemplo prático irá ler o arquivo texto  chamado texto.txt que deve estar presente na pasta data .(esta pasta deve estar na raiz da aplicação). Usamos o comando Server.MapPath("/data/texto.txt") para obter o arquivo.

Para criar a aplicação eu vou usar o Webmatrix (assim todos podem acompanhar):

    Abra o ASP.NET Web Matrix.
   
Selecione (General) do painel Templates.
    Selecione o modelo ASP.NET Page.
    Digite um caminho de arquivo na caixa Location. (no meu caso eu informei : d:\macoratti\aspnet\)
    Digite EscreverTxt  na caixa Filename. (você pode usar qualquer outro nome de arquivo válido)

1- Na guia Design do WebMatrix insira os controles : TextBox (Multiline) , Button e Label.

O código HTML do arquivo é dado a seguir: Nele vemos as definições dos controles e a definição do evento OnClick do botão de comando que chama a rotina salvarTxt
 

<html>
<head>
<title>Lendo e escrevendo em arquivo texto.</title>
</head>
<body>
<form runat="server">
<p>
<img height="32" src="maco10.gif" width="233" border="0" />&nbsp;<font face="Verdana" size="2">
<strong><font size="3"><font color="#0000a0">Lendo e escrevendo em arquivos texto</font>.</font>&nbsp;&nbsp;&nbsp; </strong></font>
</p>
<asp:TextBox id="txtTextFile" Runat="server" TextMode="MultiLine" Rows="10" Width="594px"></asp:TextBox>
<br />
<asp:Button id="button1" onclick="salvarTxt" Runat="server" Text="Salvar Alterações"></asp:Button>
<p>
  <asp:placeholder id="ph1" Runat="server" Visible="False">
     <hr />
    <asp:Label id="label1" runat="server"></asp:Label>
   </asp:placeholder>
</p><p></p><p>
</p>
</form>
</body>
</html>

2- O código referente ao script VB.NET é dado abaixo. Nele estou fazendo o seguinte :

Dim FilePath as String = Server.MapPath("/data/texto.txt")                            
Dim objFileWriter as StreamWriter
Dim objStreamReader as StreamReader
Dim sContents as String=""

Sub Page_Load(Source as Object, E as EventArgs)
    if not Page.IsPostBack then
        LerArquivo()
    end if
End Sub

Sub salvarTxt(Source as Object, E as EventArgs)
   sContents = txtTextFile.text
   objFileWriter = File.CreateText(FilePath)
   objFileWriter.Write(sContents)
   objFileWriter.Close()
   LerArquivo
   ph1.visible="True"
   label1.Text="Alterações realizadas com sucesso !"
End Sub

Sub LerArquivo()
   objStreamReader = File.OpenText(FilePath)
   Dim contents as String = objStreamReader.ReadToEnd()
   txtTextFile.text = contents
   objStreamReader.Close()
End Sub

O código completo do arquivo - EsceverTxt.aspx - é dado a abaixo para você ter uma visão geral do mesmo:

<%@ Page Language="vb" %>
<%@ import Namespace="System.IO" %>
<script runat="server">

Dim FilePath as String =
Server.MapPath("/data/texto.txt")
Dim objFileWriter as StreamWriter
Dim objStreamReader as StreamReader
Dim sContents as String=""

Sub Page_Load(Source as Object, E as EventArgs)
if not Page.IsPostBack then
    LerArquivo()
end if
End Sub

Sub salvarTxt(Source as Object, E as EventArgs)
  sContents = txtTextFile.text
  objFileWriter = File.CreateText(FilePath)
  objFileWriter.Write(sContents)
  objFileWriter.Close()
  LerArquivo
  ph1.visible="True"
  label1.Text="Alterações realizadas com sucesso !"
End Sub

Sub LerArquivo()
  objStreamReader = File.OpenText(FilePath)
  Dim contents as String = objStreamReader.ReadToEnd()
  txtTextFile.text = contents
  objStreamReader.Close()
End Sub

</script>
<html>
<head>
<title>Lendo e escrevendo em arquivo texto.</title>
</head>
<body>
<form runat="server">
<p>
<img height="32" src="maco10.gif" width="233" border="0" />&nbsp;<font face="Verdana" size="2"><strong><font size="3"><font color="#0000a0">Lendo
e escrevendo em arquivos texto</font>.</font>&nbsp;&nbsp;&nbsp; </strong></font>
</p>
<asp:TextBox id="txtTextFile" Runat="server" TextMode="MultiLine" Rows="10" Width="594px"></asp:TextBox>
<br />
<asp:Button id="button1" onclick="salvarTxt" Runat="server" Text="Salvar Alterações"></asp:Button>
<p>
<asp:placeholder id="ph1" Runat="server" Visible="False">
<hr />
<asp:Label id="label1" runat="server"></asp:Label>
</asp:placeholder>
</p>
<p>
</p>
<p>
</p>
</form>
</body>
</html>

Basta você copiar este código na guia All do seu Web Matrix , ajustar a localização do arquivo texto , e , rodar a aplicação.

Abaixo o resultado do processamento do script:

Eu sei ,  é  apenas ASP.NET , mas eu gosto...

Referências:


José Carlos Macoratti