private void CopiaPastaEArquivos(string Path_Origem, string Path_Destino) { try { // Variaveis de controle durante a cópia dos arquivos. string Nome_Arquivo = string.Empty; string Arquivo_Destino = string.Empty; string Subdiretorio; // O método GetFiles retorna um vetor com todos os arquivos dentro da pasta string[] Lista_Arquivos = Directory.GetFiles(Path_Origem); // O método GetDirectories retorna um vetor com todos as subpastas dentro da pasta string[] Lista_Diretorios = Directory.GetDirectories(Path_Origem); // Se existem subdiretorios, temos que chamar o método recursivamente copiando // os arquivos e subpastas if (Lista_Diretorios.Length > 0) { // Percorre o vetor armazenando o caminho de cada subdiretorio da pasta foreach (string Diretorio in Lista_Diretorios) { // Desta maneira pegamos a pasta que esta selecionada e criamos na // pasta de destino caso ela não exista Subdiretorio = Path_Destino + "\\" + Diretorio.Substring(Diretorio.LastIndexOf("\\")); if (!Directory.Exists(Subdiretorio)) { Directory.CreateDirectory(Subdiretorio); } // Chama o método recursivamente copiando as sub-pastas e arquivos contidos nelas CopiaPastaEArquivos(Diretorio, Subdiretorio); // progressBar1.PerformStep(); } } progressBar1.Minimum = 0; progressBar1.Value = 0; progressBar1.Maximum = Lista_Arquivos.Length; // Se existem arquivos, temos que chamar o método File.Copy para cada arquivo if (Lista_Arquivos.Length > 0) { // Percorre o vetor de arquivos, lembrando que este vetor foi atribuido anteriormente e recebe // o nome dos arquivos da pasta juntamente com o caminho dos mesmos foreach (string Arquivo in Lista_Arquivos) { // O metodo Path.GetFileName(string Path) retorna a o nome do arquivo extraindo assim o caminho do path Nome_Arquivo = Path.GetFileName(Arquivo); /* * Voce pode tambem filtrar os arquivos por extensão usando o método Path.GetExtension(string path); * exemplo: * string extensao = Path.GetExtension(Arquivo) * if(extensao.Equals(“.exe”)) * …….. */ // Temos que criar o nome do arquivo de destino usando o método Path.Combine(string Path1, string Path2); // combinando o nome do arquivo e a pasta de destino. Arquivo_Destino = Path.Combine(Path_Destino, Nome_Arquivo); // Por fim copiamos os arquivos para a pasta de destino. System.IO.File.Copy(Arquivo, Arquivo_Destino, true); progressBar1.PerformStep(); } } } catch (Exception ex) { MessageBox.Show("Erro técnico: " + ex.Message, ConfigSistema1.Default.NomeEmpresa, MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1); } }