Динамическая папка SSIS

Я создаю пакет, который проходит через несколько путей к папкам и загружает файлы Excel. Пути к файлам Excel следующие. Файлы расположены в папке «a», которая из года в год называется одинаково, однако имя папки «xy*» меняется в зависимости от года. Поэтому я хочу, чтобы SSIS искала файлы excel, выполняя поиск на диске H, на котором есть папка «a». Я просмотрел System.IO.Directory.GetDirectories(string, string,SearchOptions), но это дает мне только первую подпапку. например H:\x\xy2017. Буду признателен за любую оказанную помощь.

H:\x\xy2017\z\xy2017\a

H:\x\xy2017\z\xy2017\a

H:\x\xy2018\z\xy2018\a

Это код C#, который я использовал в задаче Script для рекурсивного перебора папок. Я не уверен, что я делаю неправильно.

        Dts.Variables["User::varFolderPath1"].Value = Directory.GetFiles(@"S:\HEDIS", "*DMHM Lead Results*", SearchOption.AllDirectories);

        foreach (Object obj in Dts.Variables["User::varFolderPath1"].Value.ToString())
        {

            Console.WriteLine(Dts.Variables["User::varFolderPath1"].Value.ToString());

        }

person Hmen    schedule 21.03.2018    source источник
comment
Чтобы повторить, учитывая начальный каталог, я хотел бы создать список всех папок, которые названы определенным значением.   -  person billinkc    schedule 21.03.2018
comment
@billinkc да, я пытаюсь получить список путей к папкам, которые содержат это конкретное имя папки. Спасибо   -  person Hmen    schedule 21.03.2018
comment
Пробовали вызывать ваш метод рекурсивно?   -  person dsdel    schedule 21.03.2018
comment
@dsdel да, я сделал, но что, похоже, это не принесло никаких результатов   -  person Hmen    schedule 22.03.2018
comment
@Hmen, пожалуйста, обновите свой пост, содержащий код того, что вы пробовали.   -  person dsdel    schedule 22.03.2018
comment
@dsdel я обновил пост. Спасибо   -  person Hmen    schedule 22.03.2018
comment
@Hmen, существует ли максимальная глубина каталогов (поскольку в каждом каталоге максимум 3 раза может содержаться ваша строка поиска)? Диск содержит много файлов? Если нет, возможно, лучше найти все файлы?   -  person dsdel    schedule 22.03.2018
comment
@dsdel да, каталоги будут иметь тот же уровень, как указано в примере, и в этой корневой папке есть много других файлов Excel, поэтому я не хочу приносить все файлы.   -  person Hmen    schedule 23.03.2018
comment
@Hmem пытался поместить foreach в foreach? Таким образом, вы можете искать в полученном каталоге все другие каталоги ниже, находя то, что хотите.   -  person dsdel    schedule 23.03.2018


Ответы (2)


Используйте «Контейнер цикла по каждому элементу».

1 Перейдите в «Коллекция» и выберите «Перечислитель файлов по каждому элементу».

2 Он запросит папку, содержащую файлы, здесь вы должны выбрать основную папку

т.е. в вашем случае (H:\x).

3 Затем вам нужно установить флажок «Обход подпапок», и это должно сработать.

введите здесь описание изображения

person sandeep rawat    schedule 22.03.2018
comment
спасибо, но имена файлов excel также меняются, и в корне есть несколько файлов excel. - person Hmen; 22.03.2018
comment
в файлах поместите *.xls или любое другое расширение. Это даст весь файл в подпапке с расширением .xls - person sandeep rawat; 23.03.2018
comment
Спасибо за ваш вклад, но в этой корневой папке есть много файлов Excel, которые мне не нужны, поэтому ваш способ также попытается загрузить эти файлы, и пакет завершится ошибкой. - person Hmen; 23.03.2018

Вот ответ на задание сценария.

  string root = @"S:\directory\";
        string folder = "root folder";
        DateTime lookbackDate = DateTime.Now.AddMonths(-6);

        string messageText = "";

        messageText += String.Format("We're looking for files that have been made since {0}", lookbackDate);
        MessageBox.Show(messageText); messageText += "\n";
        messageText += ("Starting directory search now\n");
        MessageBox.Show(messageText); messageText += "\n";

        string[] dirs = Directory.GetDirectories(root, folder, SearchOption.AllDirectories);
        foreach (string dir in dirs)
        {
            messageText += String.Format("Directory found! {0}", dir);
            MessageBox.Show(messageText); messageText += "\n";

            foreach (string file in Directory.GetFiles(dir))
            {
                DateTime filedate = File.GetCreationTime(file);
                string fname = Path.GetFileName(file);

                if (filedate >= lookbackDate)
                {
                    messageText += String.Format("MATCH! {0} - created {1}", fname, filedate);
                    MessageBox.Show(messageText); messageText += "\n";
                }
                else
                {
                    messageText += String.Format("TOO OLD! {0} - created {1}", fname, filedate);
                    MessageBox.Show(messageText); messageText += "\n";
                }

            }
        }

        messageText += ("\nDirectory search complete!");
        MessageBox.Show(messageText);
person Hmen    schedule 27.03.2018