powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / SSIS: Получить атрибуты файла
25 сообщений из 34, страница 1 из 2
SSIS: Получить атрибуты файла
    #39737758
Trurl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.
Прошу помощи в реализации задачи для SSIS:
из переменной пакета Variable1 (string) берётся полный путь файла, в переменную пакета Variable2 (boolean) пишется признак File In Use, в переменную Variable3 (Int64) пишется размер файла в байтах.
Очевидно, что задача решается через Script Task.

Проблема - вообще не знаю С# и VB, копипаста нагугленных решений давала невозможность выполнения кода с целой россыпью ошибок.

Использую SSDT 2016
...
Рейтинг: 0 / 0
SSIS: Получить атрибуты файла
    #39737807
.Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Trurlпризнак File In Use
В отличие от остального, это нечеткая и не совсем уж тривиальная задача.

Впрочем, у вас есть простой путь: Execute Process Task + dir + Windows Sysinternals Handle.exe
...
Рейтинг: 0 / 0
SSIS: Получить атрибуты файла
    #39737835
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
.ЕвгенийTrurlпризнак File In Use
В отличие от остального, это нечеткая и не совсем уж тривиальная задача.

Да ладно те, попытка открыть файл с эксклюзивным доступом на запись.
Не открылся - File In Use.
...
Рейтинг: 0 / 0
SSIS: Получить атрибуты файла
    #39737853
.Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222Да ладно те, попытка открыть файл с эксклюзивным доступом на запись.
Не открылся - File In Use.
Или файла установлен атрибут Read Only, или у пользователя недостаточно прав. У-упс, да?
...
Рейтинг: 0 / 0
SSIS: Получить атрибуты файла
    #39737858
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
.Евгенийaleks222Да ладно те, попытка открыть файл с эксклюзивным доступом на запись.
Не открылся - File In Use.
Или файла установлен атрибут Read Only, или у пользователя недостаточно прав. У-упс, да?
В чем разница, Зин?
...
Рейтинг: 0 / 0
SSIS: Получить атрибуты файла
    #39737884
.Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222.ЕвгенийИли файла установлен атрибут Read Only, или у пользователя недостаточно прав. У-упс, да?
В чем разница, Зин?
Во всем, если нужно прочесть стабильный файл.
Во многом, если нужно дождаться окончания блокировки.

P.S.
- Твоя программа пишет, что файл заблокирован. Так?
- Да.
- Берем Handle, смотрим результат. Где блокировка файла?
- Ну, не знаю... значит, что-то еще мешает. Неправильно выгрузили файл...
- Смотри сюда. Передо мной бизнес поставил глобальную задачу: обработать файл. Благодаря твоему компоненту задача не выполняется. Частную задачу, поставленную тебе, твой компонент выполняет неправильно. Корректно указать на причину не может. Ты у нас джуниор, нет? Ну тогда извини, поздно тебя учить решать поставленные задачи вместо своих собственных.
...
Рейтинг: 0 / 0
SSIS: Получить атрибуты файла
    #39737990
Trurl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Давайте разделим задачу на две независимых:
1) убедиться, что файл из сетевой папки никем не изменяется и может быть скопирован для дальнейшей обработки DTS-пакетом.
2) мы достоверно знаем, что файлом никто не пользуется. Нужно получить размер файла. (Чтобы при превышении порогового значения зазиповать файл и передать имя зип-архива в задачу отправки почты).
Да, можно это сделать через запуск команды dir с записью результатов в неструктурированный текстовый файл, построчный импорт содержимого этого файла в SQL и последующего анализа. Но это - не наш метод.
...
Рейтинг: 0 / 0
SSIS: Получить атрибуты файла
    #39738007
.Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TrurlДавайте разделим задачу на две независимых:
1) убедиться, что файл из сетевой папки никем не изменяется и может быть скопирован для дальнейшей обработки DTS-пакетом.
2) мы достоверно знаем, что файлом никто не пользуется. Нужно получить размер файла. (Чтобы при превышении порогового значения зазиповать файл и передать имя зип-архива в задачу отправки почты).
Да, можно это сделать через запуск команды dir с записью результатов в неструктурированный текстовый файл, построчный импорт содержимого этого файла в SQL и последующего анализа. Но это - не наш метод.

Не проще ли будет попытаться заархивировать файл? Ошибки обрабатывайте или транслируйте в лог, а при успехе работайте с архивом как вам заблагорассудится.
...
Рейтинг: 0 / 0
SSIS: Получить атрибуты файла
    #39738008
Trurl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
.ЕвгенийНе проще ли будет попытаться заархивировать файл? Ошибки обрабатывайте или транслируйте в лог, а при успехе работайте с архивом как вам заблагорассудится.

Проще. Но это решение другой задачи.

Моя задача формулируется так: есть большой пакет, который генерирует разнообразную отчётность.
Все отчёты представляют из себя csv-файлы.
Отчёты нужно отправлять пользователям электронной почтой.
Большие отчёты не пролезают сквозь фильтр корпоративной почты, так как отсекаются по объёму в 20 мегабайт.
Файл с отчётом нужно зазиповать только в том случае, если нельзя его отправить в незазипованном варианте.
...
Рейтинг: 0 / 0
SSIS: Получить атрибуты файла
    #39738029
.Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TrurlМоя задача формулируется так: есть большой пакет, который генерирует разнообразную отчётность.
Все отчёты представляют из себя csv-файлы.
Отчёты нужно отправлять пользователям электронной почтой.
Большие отчёты не пролезают сквозь фильтр корпоративной почты, так как отсекаются по объёму в 20 мегабайт.
Файл с отчётом нужно зазиповать только в том случае, если нельзя его отправить в незазипованном варианте.
Возможно ли модифицировать большой пакет, чтобы он поддерживал (читал/писал) наличие/отсутствие блокировки на файле (таблица со списком файлов в работе, файлы-дубли xxx.lck и т.п.? А в идеале - самостоятельно отправлял файлы, благо это дело нехитрое.
...
Рейтинг: 0 / 0
SSIS: Получить атрибуты файла
    #39738049
Trurl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
.ЕвгенийВозможно ли модифицировать большой пакет, чтобы он поддерживал (читал/писал) наличие/отсутствие блокировки на файле (таблица со списком файлов в работе, файлы-дубли xxx.lck и т.п.?
Так мне и нужна помощь по написанию компонента, который бы определял, есть на файле блокировки или нет.
Есть блокировка - завершить выполнение пакета. Нет блокировки - скопировать файл и начать тянуть из него данные.

.Евгений А в идеале - самостоятельно отправлял файлы, благо это дело нехитрое.

Он и так сам отправляет. Задача - написать функцию, которая будет направлять поток по сценарию отправки оригинального файла либо по сценарию зипования и отправки зазипованного файла.
...
Рейтинг: 0 / 0
SSIS: Получить атрибуты файла
    #39738073
Фотография vikkiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Trurl,

у тебя workflow с входным параметром пути и имени файла (т.е. полный путь)
поставь script task (проверки на lock файла) на выходе которого будет успешное окончание либо выход с ошибкой
например при помощи PowerShell код выхода ошибки будет 999, а 0 - это чистый/успешный выход без ошибок
Код: powershell
1.
powershell.exe -command "Try{[System.IO.File]::Open('C:\tmp\tst.xlsx','Open','Write').Close()}Catch{exit 999}"

естественно путь файла будет параметром из SSIS типа (User::my_file_full_path) т.е. всё выражение команды можно конструировать через expressions
...
Рейтинг: 0 / 0
SSIS: Получить атрибуты файла
    #39738196
.Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Trurl,
кажется, мы друг друга не понимаем. Еще раз объясню свое мнение.
Большой пакет формирует отчетность. Если вся ее обработка находится в большом пакете, то модифицировать отчетность кому-то еще нет видимого смысла. Чтобы кто-то не совершил бессмысленное действие, такую возможность легко блокировать правами пользователя. Соответственно, конфликт отсутствует, проверка блокировок (сомнительным способом) не требуется.
...
Рейтинг: 0 / 0
SSIS: Получить атрибуты файла
    #39738209
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TrurlТак мне и нужна помощь по написанию компонента, который бы определял, есть на файле блокировки или нет.
Есть блокировка - завершить выполнение пакета. Нет блокировки - скопировать файл и начать тянуть из него данные.Неверная постановка задачи.
Информация о заблокированности файла становится бессмысленной сразу после ее получения.
...
Рейтинг: 0 / 0
SSIS: Получить атрибуты файла
    #39738215
Trurl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
.ЕвгенийTrurl,
кажется, мы друг друга не понимаем. Еще раз объясню свое мнение.
Большой пакет формирует отчетность. Если вся ее обработка находится в большом пакете, то модифицировать отчетность кому-то еще нет видимого смысла. Чтобы кто-то не совершил бессмысленное действие, такую возможность легко блокировать правами пользователя. Соответственно, конфликт отсутствует, проверка блокировок (сомнительным способом) не требуется.

Мы точно не понимаем друг друга.
Есть две разных задачи:
1) получить размер файла,
2) получить сведения, что в файл не совершается запись.

Всем мои объяснения, как я это планирую использовать, не влияют на формулировку задач.

Вот здесь предлагается решение:
http://microsoft-ssis.blogspot.com/2011/03/get-file-properties-with-ssis.html

Я все варианты повторяю в в своей Visual Studio, но всегда получаю одинаковую ошибку
...
Рейтинг: 0 / 0
SSIS: Получить атрибуты файла
    #39738219
Trurl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
invmНеверная постановка задачи.
Информация о заблокированности файла становится бессмысленной сразу после ее получения.

В моём случае верная.
Поставщик данных выкладывает архивные файлы одной порцией на наш FTP-сервер рано утром.
После того, как передача всех данных завершена, в эти файлы уже никто писать не будет.
Мне нужно узнать, что передача файлов завершена и я могу начать извлекать из этих архивов файлы с данными.
...
Рейтинг: 0 / 0
SSIS: Получить атрибуты файла
    #39738251
.Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TrurlПоставщик данных выкладывает архивные файлы одной порцией на наш FTP-сервер рано утром.
После того, как передача всех данных завершена, в эти файлы уже никто писать не будет.
Мне нужно узнать, что передача файлов завершена и я могу начать извлекать из этих архивов файлы с данными.
Смотрите наличие установленных FTP соединений.
...
Рейтинг: 0 / 0
SSIS: Получить атрибуты файла
    #39738311
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TrurlПоставщик данных выкладывает архивные файлы одной порцией на наш FTP-сервер рано утром.
После того, как передача всех данных завершена, в эти файлы уже никто писать не будет.
Мне нужно узнать, что передача файлов завершена и я могу начать извлекать из этих архивов файлы с данными.
Молодой человек, Вы делаете мне смешно. Поставщик выкладывает текстовый файлик info.txt, в котором последней строкой идет хэш от даты и времени создания этого файла (ну или просто текстовый "EOF"), а до этого для каждого выложенного файла идет md5 хэш (или sha-1) и название файла.
Вы читаете маленький файлик, парсите, получаете список того, что НУЖНО таки обработать. Нет файла из списка - передача по FTP не завершена.
Если файлики на месте - циклом читаете содержимое, от него сразу вычисляете хэш, при несовпадении с нужным значением из массива помечаете (или отправляете сообщение "Ой-вей, все плохо, или bad sectors, или nonECC memory error, или повредился файл при передаче из-за сбойной сетевой карты, или запись в файл ЕЩЕ не завершена, все еще идет передача) и переходите к следующему. Если все без ошибок - еще отдельное письмо "Файлики кошерные, таки все хорошо!".

ВСЁ. Не нужно изобретать велосипед. Нужно уметь работать с поставщиком данных. Ему тоже важно выгрузить на Ваш FTP свои файлики в целости и сохранности.

Соединений может не быть. Активных. Пришел сисадмин, вырубил файерволлом все коннекты, файл оборвался на середине. НИЧЕГО не держит такой файл на запись, но тем не менее файлом пользоваться НЕЛЬЗЯ.

Понимаете теперь "всю глубину наших глубин" (с) ?
...
Рейтинг: 0 / 0
SSIS: Получить атрибуты файла
    #39738313
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
.ЕвгенийTrurlПоставщик данных выкладывает архивные файлы одной порцией на наш FTP-сервер рано утром.
После того, как передача всех данных завершена, в эти файлы уже никто писать не будет.
Мне нужно узнать, что передача файлов завершена и я могу начать извлекать из этих архивов файлы с данными.
Смотрите наличие установленных FTP соединений.
Отсутствие FTP соединений означает не то, что передача всех файлов завершена. Это может означать, что первую порцию передали, потом сделали долгую паузу, закрыв соединения, потом продолжили передача оставшейся части.

Не нужно советовать так оптимистично. Ведь коллега послушает Ваш совет - и так и сделает. Желательно сразу указывать на подводные камни. То есть в целом Ваш совет неплох - но не для данного конкретного случая.
...
Рейтинг: 0 / 0
SSIS: Получить атрибуты файла
    #39738314
Trurl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Andy_OLAP,

откуда у Вас уверенность, что файл info.txt есть?
У меня такой уверенности нет.
Опять же, функции вычисления хэшей файлов в SSIS нет.
Реализация моей задачи не средствами SQL Server Integration Services вообще не имеет отношения к текущему разделу форума.
...
Рейтинг: 0 / 0
SSIS: Получить атрибуты файла
    #39738317
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Trurlоткуда у Вас уверенность, что файл info.txt есть?Если подобного файла нет, то вы сами себе злобные буратины вместе с поставщиком.
TrurlОпять же, функции вычисления хэшей файлов в SSIS нет.Script Component придется таки освоить.
...
Рейтинг: 0 / 0
SSIS: Получить атрибуты файла
    #39738318
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TrurlAndy_OLAP,

откуда у Вас уверенность, что файл info.txt есть?
У меня такой уверенности нет.
Опять же, функции вычисления хэшей файлов в SSIS нет.
Реализация моей задачи не средствами SQL Server Integration Services вообще не имеет отношения к текущему разделу форума.
Вы таки не поняли. У меня уверенность, что такого файла нет. Но он должен быть. Вы решаете проблему передвижения путем попытки запрять корову сзади телеги. А нужно взять лошадь и запрячь спереди телеги. Понимаете аналогию?
Нужно решать правильную проблему. Ту, которую можно и нужно решить. А не ту, которую Вам задали решать - а тут даже не так, а просто проблему, которую Вы считаете нужной для решения.

Не нужно гадать про файлы. Передаются, не передаются, открыты на запись, есть коннекты. Это все лишнее. Получили список файлов, получили список хэшей, начали обрабатывать. Нет файла на месте, а название в перечне есть - все, проблема. Есть файл, но сумма не совпадает - все, проблема. А кто его на запись держит или обрубилась передача на полпути - это уже раскопки по результату проблемы.

Того, кому нужно СОДЕРЖИМОЕ файла, не интересуют FTP коннекты. Ему важно - это информация или свалка байтов. Понимаете?
...
Рейтинг: 0 / 0
SSIS: Получить атрибуты файла
    #39738320
Trurl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Andy_OLAP,

отбросим все мои объяснения на тему зачем мне решать мою задачу.

Мне нужно знать, как средствами SSIS получить в переменные пакета два атрибута файла - размер и FileInUse.
Ваша квалификация позволяет дать ответ на этот конкретный вопрос?
...
Рейтинг: 0 / 0
SSIS: Получить атрибуты файла
    #39738321
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TrurlМне нужно знать, как средствами SSIS получить в переменные пакета два атрибута файла - размер и FileInUse.Хорош фантазировать, нет у файла атрибута FileInUse, в NTFS забыли предусмотреть.
...
Рейтинг: 0 / 0
SSIS: Получить атрибуты файла
    #39738322
Фотография vikkiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Trurl,

SSIS всего лишь контейнер WorkFlow с некоторыми стандартизированными блоками
он вовсе не покрывает абсолютно весь спектр возможных задач (как и любой другой инструмент)
так что остальное только скриптами и прочими кастомными блоками.

да хоть через SQL (xp_dirtree, xp_cmdshell, xp_fileexist и т.д.) можешь запросить
что там в директории происходит и в каком состоянии находится, никто ведь не запрещает.

для работы с файлами - лучше использовать для этого предназначенные инструменты, в самом
Windows есть куча утилит как GUI так и API (.bat скриптовые, .vb, .NET и пр.) для решения таких вопросов
вызвать их из SSIS - всегда было довольно просто.

кстати переименование файла на котором стоит Lock : вывалится с ошибкой,
это свойство успешно и можно использовать в SSIS для проверки
(а дальше : ошибка - одна ветвь алгоритма, ок - другая).

в общем вопрос фантазии и опыта реализации.

если отбросить завесу мутности и примитивности некоторых персонажей
то в остальном тебе дали достаточно широкий спектр потенциальных направлений решений
дальше - вопрос личных предпочтений.
...
Рейтинг: 0 / 0
25 сообщений из 34, страница 1 из 2
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / SSIS: Получить атрибуты файла
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]