none
Copiar um arquivo XLSX de varias subpastas RRS feed

  • Pergunta

  •      Olá!! Pessoal.
    Eu tenho um projeto que faz a leitura de varias arquivos excel, porem estes arquivos precisam estar numa determinada pasta, sendo que todo mês eu tenho que ir em varias pastas manualmente , copiar os arquivos e colar na pasta que o ETL lê.

    eu consigo criar uma função robocopy no ssis? consigo configurar o File System Task para fazer isso por meio de alguma variável?


    Ednilton Santos

    sexta-feira, 17 de fevereiro de 2017 19:53

Respostas

  • Você pode criar um Script Task no SSIS, dessa forma basta escrever um script C# que faça a varredura dos diretórios desejados e copie os arquivos para o destino. Segue um pequeno exemplo:

    string filtro = "*.xslx";
                string diretorioDestino = @"C:\Arquivos\Destino";
    
                List<string> origens = new List<string>();
                origens.Add(@"D:\ArquivosDepto1\");
                origens.Add(@"F:\ArquivosDepto3\");
    
    
                foreach (var origem in origens)
                {
                    foreach (string arquivo in Directory.GetFiles(origem, filtro))
                    {
                        File.Copy(arquivo, Path.Combine(diretorioDestino, Path.GetFileName(arquivo)));
                    }
                }


    João Paulo Gomes

    • Marcado como Resposta Ednilton Santos sábado, 18 de fevereiro de 2017 21:40
    sexta-feira, 17 de fevereiro de 2017 22:45

Todas as Respostas

  • Você pode criar um Script Task no SSIS, dessa forma basta escrever um script C# que faça a varredura dos diretórios desejados e copie os arquivos para o destino. Segue um pequeno exemplo:

    string filtro = "*.xslx";
                string diretorioDestino = @"C:\Arquivos\Destino";
    
                List<string> origens = new List<string>();
                origens.Add(@"D:\ArquivosDepto1\");
                origens.Add(@"F:\ArquivosDepto3\");
    
    
                foreach (var origem in origens)
                {
                    foreach (string arquivo in Directory.GetFiles(origem, filtro))
                    {
                        File.Copy(arquivo, Path.Combine(diretorioDestino, Path.GetFileName(arquivo)));
                    }
                }


    João Paulo Gomes

    • Marcado como Resposta Ednilton Santos sábado, 18 de fevereiro de 2017 21:40
    sexta-feira, 17 de fevereiro de 2017 22:45
  • John,

    Muito obrigado pela informação.


    Ednilton Santos

    sábado, 18 de fevereiro de 2017 21:41
  • João, 

    Ainda não consegui fazer rodar o código, tipo tentei antes fazer edições e outras pesquisas.mas nada :(/

    #region Namespaces
    using System;
    using System.Data;
    using Microsoft.SqlServer.Dts.Runtime;
    using System.Windows.Forms;
    using System.IO;
    using System.Collections;
    using System.Collections.Generic;
    using System.Linq;
    #endregion
    
    public static void Main()
            {
                string filtro = "*.xlsx";
                string diretorioDestino = @"C:\Users\certeza\OneDrive\Certeza Consultoria\CLIENTES -CERTEZA\PRESERVE\Carga";
                List<string> origens = new List<string>();
                origens.Add(@"C:\Users\certeza\OneDrive\Certeza Consultoria\CLIENTES -CERTEZA\PRESERVE\FATURAS-DLOG\");
                // 
                foreach (var origem in origens)
                {
                    foreach (string arquivo in GetFiles(origem, filtro, SearchOption.AllDirectories))
                    {
                        File.Copy(arquivo, Path.Combine(diretorioDestino, Path.GetFileName(arquivo)));
                    }
                }
            }



    Ednilton Santos

    quarta-feira, 22 de fevereiro de 2017 18:51
  • Olá Ednilton! Ocorre algum erro?

    João Paulo Gomes

    quinta-feira, 2 de março de 2017 00:31
  • João , Me desculpa. Eu que fiz confusão!
    o comando ele copia uma arquivo de uma pasta para outras, porem só não acessa subpastas, para isso eu preciso sair dizendo caminho a caminho. e não do tipo varrer tudo que ta dentro do diretório "pai".

    mas já ta me quebrando um galho gigantesco!! 

    Ednilton Santos

    sexta-feira, 3 de março de 2017 13:19
  • Olá, para incluir os subdiretórios basta incluir uma terceira opção (em negrito):

    String[] allfiles = System.IO.Directory.GetFiles("path/to/dir", "*.*", System.IO.SearchOption.AllDirectories);
    


    João Paulo Gomes

    terça-feira, 7 de março de 2017 23:11