|
Как на Sftp перебрать список файлов ? при помощи утилиты WinSCP | ☑ | ||
---|---|---|---|---|
0
Nik_Zzz
31.03.20
✎
13:34
|
Подскажите пожалуйста. Как на Sftp перебрать список файлов ? при помощи утилиты WinSCP
|
|||
1
Ёпрст
31.03.20
✎
13:51
|
(0) там проще каталоги синхронизировать же шь
|
|||
2
Nik_Zzz
31.03.20
✎
13:53
|
(1) я просто забираю из каталога , копирую в каталог на комп и удаляю их с sftp , делаю *.xml , но делается пачками , вот и хочу перебирать файлики по одному
|
|||
3
Ёпрст
31.03.20
✎
14:37
|
(2) и ? выполняешь скрипт, который всё из каталога на фтп переместит в твой каталог на компе.. и усё. Даже файло на фтп перебирать не надо
|
|||
4
Nik_Zzz
31.03.20
✎
14:41
|
(3) Проблема в том что некоторые файлы куда то теряются , вот и хочу этот момент методом перебора отладить
|
|||
5
Ёпрст
31.03.20
✎
14:44
|
(4) давно это было, по памяти только помню, что там один метод synchronize и параметры:
local — файлы скачиваются с сервера в локальную папку, remote — изменения в локальной папке будут залиты на сервер, both — двухсторонняя синхронизация. Это что касается каталогов. А про всё остальное, надо доку к WinSCP почитать. Давно этим г. не пользуюсь, проще всё через вэбсервис слепить |
|||
6
Nik_Zzz
31.03.20
✎
14:48
|
(5) Полностью согласен, но сторонний поставщик инфы, не хочет предоставлять веб-сервис, приходится довольствоваться тем что есть .
|
|||
7
Nik_Zzz
31.03.20
✎
14:51
|
synchronize , знаю эту тему , но там идет полная синхронизация всех файлов , это не годится , так как я после копирования их удаляю и считаю их обработанными .
А методом synchronize она будет опять их создавать. |
|||
8
arsik
гуру
31.03.20
✎
14:56
|
(7) Смотрите мануал. Все методы ком объекта описаны. https://winscp.net/eng/docs/library
|
|||
9
Nik_Zzz
31.03.20
✎
15:45
|
Пытаюсь читать, создает пустой файлик , почему ? хотя файлики на sftp имеются.
СтрокаПрограммы = "cmd.exe /c """"" + ПутьWinSCP + """ /console /command " + """option batch abort"" " + """open " + ПрофильWinSCP + """ " + """ls " + КаталогНаSFTPСервере + """""" + """ " + """ close""" + " > FMfiles.txt 2>&1" + """ " + """ exit"""; |
|||
10
ptiz
31.03.20
✎
16:00
|
Дарю свой костыль:
Функция ПолучитьМассивФайловWinSCP(ИмяFTPСервера, ИмяКаталогаСервера, Маска = "*.*", Позиция = 65) МассивФайлов = Новый Массив; ИмяВремФайлаРезультата = КаталогВременныхФайлов() + "winscpls" + Формат(НомерСоединенияИнформационнойБазы(), "ЧГ=") + ".txt"; Файл = Новый Файл(ИмяВремФайлаРезультата); Если Файл.Существует() Тогда УдалитьФайлы(ИмяВремФайлаРезультата); КонецЕсли; ИмяВремФайлаКоманды = КаталогВременныхФайлов() + "winscp" + Формат(НомерСоединенияИнформационнойБазы(), "ЧГ=") + ".cmd"; ДобавитьНомерКФайлуКоманды = Ложь; Файл = Новый Файл(ИмяВремФайлаКоманды); Если Файл.Существует() Тогда Попытка УдалитьФайлы(ИмяВремФайлаКоманды); Исключение ДобавитьНомерКФайлуКоманды = Истина; КонецПопытки; КонецЕсли; Если ДобавитьНомерКФайлуКоманды Тогда Для сч = 1 По 999 Цикл ИмяВремФайлаКоманды = КаталогВременныхФайлов() + "winscp" + Формат(НомерСоединенияИнформационнойБазы(), "ЧГ=") + "_" + СокрЛП(сч) + ".cmd"; сч = сч + 1; Файл = Новый Файл(ИмяВремФайлаКоманды); Если НЕ Файл.Существует() Тогда Прервать; КонецЕсли; КонецЦикла; КонецЕсли; Парам = ПреобразоватьВКомандуWinSCP( "option batch abort |open " + ИмяFTPСервера + " |cd " + ИмяКаталогаСервера + " |ls |exit"); // cmd Стр = ПутьКWinSCP + " /command " + Парам; Текст = Новый ТекстовыйДокумент; Текст.ДобавитьСтроку(Стр); Текст.Записать(ИмяВремФайлаКоманды, КодировкаТекста.OEM); WshShell = Новый COMОбъект("WScript.Shell"); Результат = WshShell.Run("""" + ИмяВремФайлаКоманды + """ > """ + ИмяВремФайлаРезультата + """", 0, 1); // без "черного окна ДОС", ждем окончания Попытка УдалитьФайлы(ИмяВремФайлаКоманды); Исключение КонецПопытки; Файл = Новый Файл(ИмяВремФайлаРезультата); Если Результат <> 0 Тогда Попытка Если Файл.Существует() Тогда УдалитьФайлы(ИмяВремФайлаРезультата); КонецЕсли; Исключение КонецПопытки; Возврат МассивФайлов; КонецЕсли; // Читаем ответ Если НЕ Файл.Существует() Тогда Возврат МассивФайлов; КонецЕсли; Текст = Новый ТекстовыйДокумент; Текст.Прочитать(ИмяВремФайлаРезультата, КодировкаТекста.UTF8); ВсегоСтрок = Текст.КоличествоСтрок(); НачалсяСписокФайлов = Ложь; Для счСтрок = 1 По ВсегоСтрок Цикл Стр = Текст.ПолучитьСтроку(счСтрок); Если Сред(Стр, 55, 4) = " .." Тогда НачалсяСписокФайлов = Истина; КонецЕсли; Если НЕ НачалсяСписокФайлов Тогда Продолжить; КонецЕсли; Если СтрДлина(Стр) < Позиция Тогда Продолжить; ИначеЕсли Лев(Стр, 1) = "D" Тогда Продолжить; КонецЕсли; ИмяФайла = Сред(Стр, Позиция); Если НЕ ПроверкаСтрокиПоМаске(ИмяФайла, Маска) Тогда Продолжить; КонецЕсли; МассивФайлов.Добавить(ИмяФайла); КонецЦикла; Попытка УдалитьФайлы(ИмяВремФайлаРезультата); Исключение КонецПопытки; Возврат МассивФайлов; КонецФункции // ПолучитьМассивФайловWinSCP() // преобразуем многострочный текст в одну строку (каждая строка идет через пробел в кавычках) // текст вида: // open "1.txt" // exit // преобразуем в : // "open ""1.txt""" "exit" Функция ПреобразоватьВКомандуWinSCP(ИсхСтр) Стр = ""; ВсегоСтрок = СтрЧислоСтрок(ИсхСтр); Для сч = 1 По ВсегоСтрок Цикл ТекСтр = СтрПолучитьСтроку(ИсхСтр, сч); ТекСтр = СтрЗаменить(ТекСтр, """", """"""); Стр = Стр + ?(Стр = "", "", " ") + """" + ТекСтр + """"; КонецЦикла; Возврат Стр; КонецФункции // ПреобразоватьВКомандуWinSCP() Функция ПроверкаСтрокиПоМаске(Знач ИсходнаяСтрока, Знач ШаблонСтроки, Парам = Истина) Экспорт ИсходнаяСтрока = ВРЕГ(ИсходнаяСтрока); ШаблонСтроки = ВРЕГ(ШаблонСтроки); Симв127=Символ(127); //Защита ковычек, запятых, и доллара ИсходнаяСтрока=стрЗаменить(ИсходнаяСтрока,"""",Симв127); ИсходнаяСтрока=стрЗаменить(ИсходнаяСтрока,",",Симв127); ИсходнаяСтрока=стрЗаменить(ИсходнаяСтрока,"$",Симв127); ШаблонСтроки=стрЗаменить(ШаблонСтроки,"""",Симв127); ШаблонСтроки=стрЗаменить(ШаблонСтроки,",",Симв127); ШаблонСтроки=стрЗаменить(ШаблонСтроки,"$",Симв127); Если Парам Тогда//добавляем стоп-символы ШаблонСтроки="$"+ШаблонСтроки+"$"; ИсходнаяСтрока="$"+ИсходнаяСтрока+"$"; КонецЕсли; //Ш=""""+ШаблонСтроки+""""; //ш=стрЗаменить(ш,"*",""","""); //ш=стрЗаменить(ш,"?",""",""?"","""); ш=ШаблонСтроки; ш=стрЗаменить(ш,"*",","); ш=стрЗаменить(ш,"?",",?,"); МассивСлов = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(ш, ","); Для Каждого Слово из МассивСлов Цикл Если НЕ ЗначениеЗаполнено(Слово) Тогда Продолжить; КонецЕсли; ДлинаСтроки=СтрДлина(ИсходнаяСтрока); ДлинаСлова=СтрДлина(Слово); Если (ДлинаСтроки>0) Тогда Если Слово="?" Тогда ИсходнаяСтрока=Сред(ИсходнаяСтрока,2); Иначе Поз=Найти(ИсходнаяСтрока,Слово); Если Поз>0 Тогда ИсходнаяСтрока=Сред(ИсходнаяСтрока,Поз+ДлинаСлова); Иначе Возврат Ложь; КонецЕсли; КонецЕсли; Иначе Возврат Ложь; КонецЕсли; КонецЦикла; Возврат Истина; КонецФункции |
|||
11
Nik_Zzz
02.04.20
✎
12:16
|
(10) Благодарю за костыль :)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |