Olá pessoal, hoje gostaria de mostrar e falar como trabalhar com diretório no Windows Form, usando a linguagem C#.NET. A idéia no geral é pegar um caminho específico, buscar todos os diretórios e os arquivos destes diretórios listados.

Usado: Visual Studio .NET 2010, C#.NET, Windows Form.
Foram utilizadas as classes System.Text; System.Windows.Forms e System.IO, para o devido funcionamento da aplicação.

O primeiro passo é definir o primeiro diretório, ou seja, o diretório principal onde podem existir outros diretórios e arquivos.  Foi criado aplicativo do tipo Windows Form como exemplo. (Imagem 1)


Imagem 1

Dentro do Form1.cs adicionei a variável chamada caminho (Code 1)

string caminho = @"C:\Temp\PastaPrincipal\";
Code 1

Note que no final do valor, a variável possui a barra indicando ao código que é um diretório.  Dentro do form_load do aplicativo comecei a escrever o restante do código. Como é um programa teste, procurei não utilizar camadas, mas recomendo que utilize no caso de uma aplicação mais robusta.

Veja as primeiras linhas do form_load. (Code 2)

private void Form1_Load(object sender, EventArgs e)
        {
            try
            {
                FileInfo TheFile = new FileInfo(caminho);
                DirectoryInfo info = TheFile.Directory;

...
Code 2

A primeira linha onde utilizo FileInfo, pego o caminho em formato específico dentro do código e armazeno na variável TheFile. A segunda linha eu pego o diretório utilizando o DirectoryInfo. (Code 3)

DirectoryInfo info = TheFile.Directory;
Code 3

A variável info do tipo DirectoryInfo possui todas as pastas necessárias ou diretórios do caminho indicado. Para pegar mais de um diretório, basta fazer um foreach. Code 4

foreach (var _directory in info.GetDirectories())
Code 4

Note que foi feito o foreach pegando todos os diretórios do caminho principal. O valor da variável foi armazenado dentro do _directory. Dependendo da sua necessidade, você pode acrescentar mais funcionalidades sem qualquer problema.

O passo seguinte é simples, basta pegar todos os arquivos dentro da pasta e fazer um novo foreach.  (Code 5)

foreach (var _directory in info.GetDirectories())
{
    //pega a lista de arquivos
    FileInfo[] NextFile = _directory.GetFiles("*.txt");
                        
    foreach (var _file in NextFile)
    {
       //pega o nome do arquivo
       string _nomeArquivo = _file.Name.ToString();
    }
}
Code 5

Note que o Code 5 mostra que existe um for dentro de outro. Um é para pegar todos os diretórios, outro para pegar todos os arquivos .txt. Lembro que pode ser qualquer outro tipo de arquivo, como xml, jpg e outros mais. Dentro do for do arquivo, deixei um exemplo onde armazeno o nome do arquivo em uma variável.

Deixo outras dicas como usar try, catch, verificar linha a linha o que foi feito e se possível usar o debug da ferramenta. Essa funcionalidade pode ser usada para copiar dados do arquivo, renomear, apagar e muito mais.

Espero que tenha gostado e qualquer dúvida pode entrar em contato.