示例#1
0
        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);
            }
        }