Atenção: esse artigo tem um vídeo complementar. Clique e assista!

Do que trata o artigo

Entre diversos assuntos, o artigo trata da criação de arquivos de texto com uma codificação específica para que possa ser lido por programas de outras plataformas e outros idiomas. Além disto, novidades da linguagem C# na versão 4 são introduzidas e também alguns aspectos práticos da programação como leitura de configurações da aplicação e o trabalho um pouco mais avançado na criação de interfaces de programas para o Windows.

Para que serve

O artigo pode servir como referência e consulta para temas como gravação e leitura de arquivos. Criação de projetos compartimentados onde as funcionalidades estão divididas em diversos projetos. Criação de interfaces Windows usando os componentes nativos da plataforma e também o trabalho com classes com a linguagem C#.

Em que situação o tema é útil

Ainda que existam editores de textos profissionais, pode ser necessário criar um editor personalizado, ou ainda, executar a leitura ou gravação de arquivos de texto para diversas finalidades como, por exemplo, troca de informações entre aplicações legadas.

Por outro lado, existem dentro do framework em que é difícil encontrar exemplos práticos rapidamente, como por exemplo uso das classes para leitura de arquivos ou ajustes para os programas Windows forms.

Pode-se usar o artigo também para tirar dúvidas sobre inclusão de referências entre projetos e o trabalho com múltiplos projetos numa mesma Solution do Visual Studio.

Resumo do DevMan

A gravação de arquivos de texto é muito simplificada quando se está usando o framework .net, mas existem aspectos que precisam ser tratados com um pouco mais de cuidado. Um destes é a codificação que o arquivo será criado e armazenado. Ainda que o sistema Windows esteja presente na maior parte dos computadores, ele está longe de ser uma unanimidade. Logo, pode surgir a necessidade de se escrever um arquivo de texto que possa ser lido por outra plataforma e também por um programa escrito em outro idioma. A codificação correta resolve estes problemas. Neste artigo serão demonstrados os principais elementos da linguagem C# para se realizar esta tarefa bem como as noções principais para se gravar arquivos. Também serão abordados alguns passos para se criar um programa separando-se suas funcionalidades em módulos. A principal separação a ser feita é da funcionalidade propriamente dita da interface gráfica com o usuário. No desenvolvimento do projeto você terá contato com o funcionamento dos parâmetros de configurações dos aplicativos Windows que são usados para dar maior flexibilidade aos programas.

Um dos primeiros trabalhos realizados pelos programas de computador foi permitir a edição de texto. Com isto tornou-se possível para produzir grandes quantidades de texto rapidamente e permitindo ao escritor revisar, corrigir, salvar o trabalho e continuar mais tarde, aproveitar textos escritos anteriormente e inserir partes em um novo etc.

Com o tempo, a maior parte das informações trocadas entre os programas era feita através de arquivos de texto e, ainda hoje, muitas das comunicações feitas entre os programas, quer estejam no mesmo computador, distribuídos numa rede ou pela Internet é feita desta forma, ou seja, usando arquivos de texto puro.

Quando se diz “texto puro” deve-se entender um arquivo que contém apenas o texto, sem formatação alguma. Quando editamos um arquivo em um programa como o Microsoft Word por exemplo, além do texto digitado, são armazenados os dados de formatação referente ao tipo da fonte, tamanho, parágrafos etc.

É necessário para o programador conhecer os recursos para gravar e ler os dados dos arquivos de texto para poder escrever aplicativos que executem estas tarefas. Normalmente em ambientes de programação como o framework .net, muitas classes estão disponibilizadas para que o trabalho seja feito da forma mais abstrata possível. Estes recursos incluem desde classes que executam o trabalho de uma vez só até as mais sofisticadas que tratam de aspectos como permissões de escrita/leitura, indicação de que o arquivo deve ser recriado quando o canal de escrita for aberto, tipo de acesso – leitura, escrita, ambos.

Ao se criar uma aplicação para manipulação de textos pode ser interessante fazer todo o trabalho com os arquivos no disco de uma maneira mais clara e se possível separada do código que cuida da interface com o usuário. Isto vem sendo enfatizado em vários artigos e por diversos programadores pois dá maior flexibilidade. A forma mais básica de conseguir isto é escrever o código necessário para trabalhar com os arquivos no disco em um projeto que pode ser uma class library (dll´s) por exemplo e, outro projeto, que vai oferecer a interface para digitar o texto, ler e criar os arquivos em outro.

Com o Visual Studio isto é bem simples de se conseguir já que uma mesma “solution” pode ter vários projetos, inclusive interligados ou não. E como a palavra de ordem para os desenvolvedores é “flexibilidade” uma maneira de se implementar esta é mantendo a aplicação configurável, ou seja, permitindo que se altere parâmetros que mudem um ou outro aspecto de seu comportamento.

Os projetos do Visual Studio e do framework .net armazenam as configurações em arquivos XML que são fáceis de compreender já que são baseados em texto puro e lembram um pouco a linguagem de marcação HTML. Da mesma forma, acessar estes dados de configuração é bem fácil com a linguagem C# que vem evoluindo muito desde o seu lançamento.

Trabalhando com arquivos

Inicialmente, persistir dados, quer seja texto ou não, para sua posterior recuperação era uma tarefa bem complexa. Nas primeiras linguagens de programação era necessário lidar com problemas como encontrar espaço livre no disco, alocar este espaço para o arquivo, transferir dados da memória para o disco, certificar que os dados foram gravados corretamente etc.

Hoje isto tudo ficou bem mais fácil. O framework .net possui classes que simplificam bastante a tarefa. Por exemplo, o código a seguir executa a gravação de um arquivo de texto:

TextWriter tw = File.CreateText(@"d:\arquivo.txt");
  tw.Write("Texto gravado no arquivo.");
  tw.Close();

A classe “TextWriter” cria um objeto que faz a gravação. O método estático “CreateText” da classe “File” que está contida na biblioteca “System.IO” retorna um objeto para a gravação. Para gravar o arquivo texto, usamos o método “Write”. Este objeto é em seguida fechado. Note que somente irá funcionar com dados de texto, do tipo string. Se você precisar gravar dados binários deve usar outro tipo de objeto como o código a seguir demonstra:

// objeto para gravar arquivo no disco
  FileStream fs = new FileStream(@"d:\Data.bin", FileMode.Create);
  // objeto que permite gravar dados binários
  BinaryWriter bw = new BinaryWriter(fs);
   
  for (int i = 0; i < 10; i++)
  {
         // grava o conteúdo no arquivo
         bw.Write(i);
  }
   
  // fecha o writer
  bw.Close();
  // fecha o objeto que escreve no arquivo
  fs.Close();

A diferença é que enquanto podemos escrever strings diretamente no objeto que grava os dados no disco, para os dados binários, como números no exemplo, é necessário um objeto do tipo “BinaryWriter” para fazer a formatação. Este objeto está vinculado com o objeto do tipo “FileStream”.

Nota do DevMan

A classe “FileStream” é completa para as tarefas de ler e escrever em arquivos e suporta tanto que se escreva e leia dados do tipo texto como também dados binários. O detalhe é que para fazer isto você deve posicionar o arquivo no ponto certo para leitura e escrita. A classe possui vários outros métodos que permitem entre outras coisas, travar o arquivo enquanto estiver sendo usado, procurar por dados dentro do mesmo etc.

...

Quer ler esse conteúdo completo? Tenha acesso completo