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.