Desenvolvimento - C#

Trabalhando com arquivos e diretórios em C#

Veja neste artigo como pesquisar, listar, criar e remover arquivos e diretórios com C#.

por Joel Rodrigues



Neste artigo veremos como efetuar algumas das tarefas mais comuns no dia a dia dos desenvolvedores no que se refere ao acesso e manipulação de diretórios e arquivos do sistema operacional. Veremos aqui como pesquisar, listar e obter detalhes de arquivos e diretórios, utilizando alguns dos recursos que nos fornece o .NET Framework.

As classes principais que utilizaremos aqui encontram-se no namespace System.IO (input/output), portanto é necessário importa-lo na seção de usings da classe.

Pesquisando e listando arquivos e diretórios

Neste primeiro exemplo, veremos como listar todos os arquivos e/ou subdiretórios contidos em um diretório cujo caminho é conhecido. Então, considerando uma aplicação console simples, o código apresentado na Listagem 1 lista todos os diretórios e arquivos contidos em “C:\”. Caso desejássemos ler outro diretório, bastaria passa-lo como parâmetro para os métodos GetDirectories e GetFiles da classe Directory.

Listagem 1: Listando arquivos e diretórios

class Program
{
    static void Main(string[] args)
    {
        string[] diretorios = Directory.GetDirectories("C:\\");
        string[] arquivos = Directory.GetFiles("C:\\");

        Console.WriteLine("Diretórios:");
        foreach (string dir in diretorios)
        {
            Console.WriteLine(dir);
        }

        Console.WriteLine("Arquivos:");
        foreach (string arq in arquivos)
        {
            Console.WriteLine(arq);
        }

    }
}

Esses dois métodos possuem mais duas sobrecargas que podem receber ainda mais dois parâmetros, um indicando um filtro para listar os arquivos ou diretórios e outro indicando do tipo de busca (se deve ser feita também nos subdiretórios). Na Listagem 2 temos um segundo exemplo onde listamos apenas os arquivos que atendam ao filtro “*.txt”, ou seja, arquivos com extensão .txt. Além disso, optamos por uma busca completa, incluindo os subdiretórios.

Listagem 2: Listando arquivos e diretórios com filtro

class Program
{
    static void Main(string[] args)
    {
        string[] arquivos = Directory.GetFiles("E:\\Sistemas", "*.txt", SearchOption.AllDirectories);

        Console.WriteLine("Arquivos:");
        foreach (string arq in arquivos)
        {
            Console.WriteLine(arq);
        }
    }
}

Para fazer o mesmo com diretórios, bastaria informar os devidos parâmetros para o método GetDirectories.

Verificando a existência de um arquivo ou diretório

Muitas vezes precisamos verificar se um determinado diretório ou arquivo existe no computador, a fim de evitar erros de leitura e escrita em caminhos inexistentes. Por exemplo, imagine um sistema em que o usuário informa um diretório onde deverá ser salvo o backup da base de dados. Pode ser necessário, por questões de segurança, verificar se esse diretório existe antes de salvar o arquivo. Para isso, temos nas classes File e Directory o método Exists, que retorna um valor booleano indicando a existência do arquivo ou diretório. Na Listagem 3 pode ser visto um exemplo de uso desses métodos.

Listagem 3: Verificando a existência de arquivos é diretórios

bool existeDiretorio = Directory.Exists("E:\\Sistemas\\Backup");
bool existeArquivo = File.Exists("E:\\Sistemas\\Configuracoes.xml");

Obtendo detalhes dos arquivos e diretórios

Sabendo que o arquivo ou diretório existe, podemos obter alguns detalhes sobre ele. Para isso existem duas classes bastante úteis: FileInfo e DirectoryInfo, que nos dão acesso a várias propriedades do arquivo ou pasta.

Na Listagem 4 vemos um exemplo de como listar algumas propriedades de um arquivo, tais como tamanho, extensão, data de criação, entre outras.

Listagem 4: Listando propriedades de um arquivo

class Program
{
    static void Main(string[] args)
    {
        FileInfo infoArquivo = new FileInfo("E:\\NFE.xml");
        Console.WriteLine("Nome: {0}", infoArquivo.Name);
        Console.WriteLine("Extensão: {0}", infoArquivo.Extension);
        Console.WriteLine("Tamanho: {0}", infoArquivo.Length);
        Console.WriteLine("Data de criação: {0}", infoArquivo.CreationTime);
        Console.WriteLine("Diretório: {0}", infoArquivo.DirectoryName);

    }
}

O resultado deste exemplo é mostrado na Figura 1.

Propriedades do arquivo

Figura 1: Propriedades do arquivo

O mesmo pode ser feito para diretórios, bastando utilizar a classe DirectoryInfo.

Criando, movendo e excluindo arquivos e diretórios

Para finalizar esses exemplos breves, veremos como criar e excluir arquivos e pastas, utilizando para isso os métodos estáticos das classes File e Directory. Na classe Directory, os métodos CreateDirectory e Delete recebem o caminho do diretório a ser criado ou excluído. Já na classe File temos os métodos Create e Delete, que também recebem o caminho completo do arquivo.

A seguir, na Listagem 5, vemos a sintaxe para utilização desses métodos.

Listagem 5: Criando e excluindo arquivos e diretórios

Directory.CreateDirectory("E:\\Sistema\\Backup");
Directory.Delete("E:\\Sistema\\Backup");            

File.Create("E:\\Sistema\\LogErros.txt");
File.Delete("E:\\Sistema\\LogErros.txt");

Existem ainda vários outros métodos e propriedades bastante úteis para realizar leitura, criação, exclusão e muito mais com arquivos e pastas. Fica como sugestão para o leitor olhar a documentação oficial na MSDN (seção Links), onde encontrará toda a estrutura detalhada das classes e como utilizá-las.

Links

Joel Rodrigues

Joel Rodrigues - Técnico em Informática - IFRN Cursando Bacharelado em Ciências e Tecnologia - UFRN Programador .NET/C# e Delphi há quase 3 anos, já tendo trabalhado com Webservices, WPF, Windows Phone 7 e ASP.NET, possui ainda conhecimentos em HTML, CSS e Javascript (JQuery).