C#

Como manipular diretórios e subdiretórios em C#

Manipular diretórios e subdiretórios é uma tarefa comum no desenvolvimento de software, especialmente ao trabalhar com sistemas de arquivos. Em C#, a classe Directory fornece uma série de métodos úteis para criar, mover, excluir e consultar diretórios. Neste post, vamos explorar como como manipular diretórios e subdiretórios em C#, usar esses métodos para gerenciar diretórios e subdiretórios de forma eficiente.

Introdução à classe Directory

A classe Directory está disponível no namespace System.IO e contém métodos estáticos para executar operações em diretórios e subdiretórios. Algumas das principais operações incluem:

  • Criar diretórios
  • Mover diretórios
  • Excluir diretórios
  • Listar diretórios e arquivos
  • Verificar a existência de diretórios

Antes de começarmos, certifique-se de incluir o namespace System.IO no seu código:

using System.IO;

Criando diretórios

Para criar um diretório, você pode usar o método Directory.CreateDirectory(). Se o diretório já existir, ele não gerará um erro.

string caminho = @"C:\Projetos\NovoDiretorio";
Directory.CreateDirectory(caminho);
Console.WriteLine("Diretório criado com sucesso!");

Este método cria o diretório especificado, e se os subdiretórios no caminho não existirem, eles também serão criados.

Verificando a existência de diretórios

Antes de realizar operações em um diretório, é importante verificar se ele existe para evitar exceções. Isso pode ser feito com o método Directory.Exists().

string caminho = @"C:\Projetos\NovoDiretorio";

if (Directory.Exists(caminho))
{
    Console.WriteLine("O diretório existe.");
}
else
{
    Console.WriteLine("O diretório não existe.");
}

Movendo diretórios

Se você quiser mover um diretório de um local para outro, pode usar o método Directory.Move(). Isso moverá o diretório e seu conteúdo para o novo caminho.

string origem = @"C:\Projetos\DiretorioAntigo";
string destino = @"C:\Projetos\DiretorioNovo";

if (Directory.Exists(origem))
{
    Directory.Move(origem, destino);
    Console.WriteLine("Diretório movido com sucesso!");
}
else
{
    Console.WriteLine("O diretório de origem não existe.");
}

Excluindo diretórios

O método Directory.Delete() exclui um diretório especificado. Se você deseja excluir um diretório que contém arquivos ou subdiretórios, precisa passar um argumento booleano true para remover tudo de forma recursiva.

string caminho = @"C:\Projetos\DiretorioParaExcluir";

// Exclui o diretório e todo o seu conteúdo
if (Directory.Exists(caminho))
{
    Directory.Delete(caminho, true);
    Console.WriteLine("Diretório excluído com sucesso!");
}
else
{
    Console.WriteLine("O diretório não existe.");
}

Listando arquivos e subdiretórios

Se você deseja listar todos os arquivos e subdiretórios em um diretório, pode usar os métodos Directory.GetFiles() e Directory.GetDirectories().

Listando arquivos:

string caminho = @"C:\Projetos\NovoDiretorio";

if (Directory.Exists(caminho))
{
    string[] arquivos = Directory.GetFiles(caminho);

    foreach (string arquivo in arquivos)
    {
        Console.WriteLine(arquivo);
    }
}

Listando subdiretórios:

if (Directory.Exists(caminho))
{
    string[] subdiretorios = Directory.GetDirectories(caminho);

    foreach (string subdiretorio in subdiretorios)
    {
        Console.WriteLine(subdiretorio);
    }
}

Listando arquivos e subdiretórios com padrões de pesquisa:

Se você deseja buscar arquivos ou subdiretórios com um padrão específico (por exemplo, todos os arquivos .txt), pode passar um padrão para o método GetFiles() ou GetDirectories().

// Listando apenas arquivos .txt
string[] arquivosTxt = Directory.GetFiles(caminho, "*.txt");

foreach (string arquivo in arquivosTxt)
{
    Console.WriteLine(arquivo);
}

Obtendo informações sobre um diretório

O método DirectoryInfo oferece uma maneira orientada a objetos de trabalhar com diretórios, permitindo que você obtenha informações detalhadas como a data de criação e os atributos do diretório.

Exemplo usando DirectoryInfo:

DirectoryInfo infoDiretorio = new DirectoryInfo(@"C:\Projetos\NovoDiretorio");

if (infoDiretorio.Exists)
{
    Console.WriteLine($"Nome do Diretório: {infoDiretorio.Name}");
    Console.WriteLine($"Caminho Completo: {infoDiretorio.FullName}");
    Console.WriteLine($"Data de Criação: {infoDiretorio.CreationTime}");
    Console.WriteLine($"Último Acesso: {infoDiretorio.LastAccessTime}");
}

O DirectoryInfo oferece mais controle e detalhes do que a classe Directory padrão, sendo útil quando você precisa de informações avançadas sobre o diretório.

Exemplo prático: Organizando arquivos em subdiretórios

Vamos criar um exemplo prático para ilustrar como organizar arquivos de um diretório em subdiretórios com base em suas extensões:

string diretorioOrigem = @"C:\Projetos\Arquivos";
string[] arquivos = Directory.GetFiles(diretorioOrigem);

foreach (string arquivo in arquivos)
{
    // Obtém a extensão do arquivo (por exemplo, .txt, .jpg)
    string extensao = Path.GetExtension(arquivo);
    
    // Cria um diretório para a extensão
    string novoDiretorio = Path.Combine(diretorioOrigem, extensao.TrimStart('.'));

    // Cria o diretório se ele não existir
    Directory.CreateDirectory(novoDiretorio);

    // Move o arquivo para o diretório correspondente
    string novoCaminho = Path.Combine(novoDiretorio, Path.GetFileName(arquivo));
    File.Move(arquivo, novoCaminho);
}

Console.WriteLine("Arquivos organizados por extensão.");

Neste exemplo, todos os arquivos em C:\Projetos\Arquivos serão movidos para subdiretórios correspondentes às suas extensões (por exemplo, .txt irá para uma pasta chamada txt).

Outro exemplo prático

Para verificar se um diretório já existe e criar subdiretórios nele, veja os códigos abaixo:

	
    //Define as pastas de origem e destino
    string sourcePath = @"\pasta_origem\";
    string destinationPath = @"\pasta_destino\";  
        
    if (Directory.Exists(sourcePath)) //Verifica se a pasta existe
     //Copia a pasta de origem para a pasta de destino
      FileSystem.CopyDirectory(sourcePath, destinationPath, UIOption.AllDialogs);  

Se for preciso dar ao usuário a opção de escolher as pastas de origem e de destino, use o componente FolderBrowserDialog.

Manipular diretórios e subdiretórios em C# é uma tarefa facilitada pela classe Directory e DirectoryInfo.

Essas ferramentas oferecem grande flexibilidade para criar, mover, excluir e consultar diretórios, tornando a manipulação de arquivos e pastas algo simples e eficiente.

Aprenda do zero ou aprimore seus conhecimentos em C#. Domine os conceitos de Orientação a Objetos e crie sistemas complexos integrados com banco de dados.

CONHEÇA O CURSO COMPLETO DE C# COM + DE 100 AULAS PRÁTICAS. Tenha acesso vitalício e certificado de conclusão.

CLIQUE NA IMAGEM ABAIXO E CONFIRA MAIS DETALHES:

Link do curso: https://go.hotmart.com/L70031146H


Dúvidas ou sugestões? Deixem nos comentários! Para mais dicas, acesse o nosso canal no YouTube:
 https://youtube.com/criandobits

Bene Silva Júnior

Bacharel em Sistemas de Informação pelo Instituto Paulista de Pesquisa e Ensino IPEP. Apaixonado por tecnologias e games do tempo da vovó!

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *