Entrada e Saída de Arquivos em C#

quarta-feira, 23 de junho de 2010 por Daniel Machado

Neste artigo vamos ver como ler e escrever em aquivos texto. Para isto abra o Visual C#, crie um projeto vazio (File > New Project… > Empty Project) com o nome CopiaTXT. No Solution Explorer clique com o botão direito do mouse no nome do projeto CopiaTXT e selecione Add > New Item…. Na janela que surgir
selecione o item Code File, este arquivo vai se chamar “CopiaTXT.cs”. Neste arquivo, crie uma classe com de nome CopiaTXT e adicione nela o método Main.

De forma muito parecida com a vista no artigo sobre entrada e saída padrão podemos utilizar objetos dos tipos TextWriter e TextReader para a manipulação de texto. Desta vez, ao invés de armazenar uma referência para o stream da entrada padrão, podemos, por exemplo, criar um novo stream preparado para a leitura de um arquivo de texto usando o código a seguir:

    string nomeDoArquivo = "meuArquivoDeTexto.txt";
    TextReader leitor = new StreamReader(nomeDoArquivo);

Se o arquivo passado como parâmetro no construtor do StreamReader não existir, será lançada uma exceção. Por questão de simplicidade e melhor entendimento dos comandos deste tutorial não iremos tratar estas exceções. Portanto certifique-se de que o arquivo de entrada esteja na mesma pasta do executável. Alternativamente, se for necessário manipular arquivos fora da pasta do binário podemos passar os caminhos relativos ou ainda fornecer os caminhos absolutos.

Para criar um stream para escrita de arquivos de texto:

    string nomeDoArquivo = "meuArquivoDeTexto.txt";
    TextWriter escritor = new StreamWriter(nomeDoArquivo);

No caso de o arquivo passado como parâmetro no construtor do StreamWriter não existir, um novo arquivo vazio será criado.

Os principais métodos que iremos utilizar são:

  • TextReader.Read – Lê um caractere;
  • TextReader.ReadLine – Lê uma linha;
  • TextWriter.Write – Escreve um caractere;
  • TextWriter.WriteLine – Escreve uma linha.

Neste exemplo vamos criar um copiador de arquivos texto. Para isto, os nomes dos arquivos de entrada e saída serão fornecidos via console durante a chamada do executável. O código a seguir ainda conta com um loop para ler, linha a linha, todo o conteúdo do arquivo de texto da entrada. Este loop termina quando a leitura devolve null indicando o fim do arquivo. Observe que ao final do processo os streams dos arquivos tanto de entrada quanto de saída devem ser fechados.

//CopiaTXT.cs
using System.IO;
class CopiaTXT
{
	static void Main(string[] args)
	{
		//recupera os caminhos dos arquivos de entrada e saida
		string arquivoEntrada = args[0];
		string arquivoSaida = args[1];

		//abre o arquivo para leitura
		TextReader leitor = new StreamReader(arquivoEntrada);

		//abre/cria o arquivo para escrita
		TextWriter escritor = new StreamWriter(arquivoSaida);

		//le a primeira linha do arquivo
		string linha = leitor.ReadLine();

		//enquanto nao for fim de arquivo
		while (linha != null)
		{
		    //imprime no arquivo de saida
		    escritor.WriteLine(linha);

		    //le a proxima linha
		    linha = leitor.ReadLine();
		}

		//nao se esqueca de liberar os arquivos
		leitor.Close();
		escritor.Close();

		System.Console.WriteLine("Arquivo copiado com sucesso!");
	}
}

Compilando e executando o código a seguir obtivemos a seguinte saída:

Lembre-se de que, para este exemplo, pelo menos o arquivo entrada.txt deve estar na pasta onde se encontra o arquivo CopiaTXT.exe.

Tags: ,

Deixe um comentário