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 RodriguesNeste 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.
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.