Ошибка открытия файла макроса ftp

mol2751

10 / 10 / 3

Регистрация: 08.07.2015

Сообщений: 179

1

«Ошибка при открытии файла макроса…»

07.04.2016, 10:51. Показов 3243. Ответов 7

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

У меня батник настроенный на работу с FTP. На машине с WINXP он работает отлично.
Перенес на машину с WIN 8.1, выдает «Ошибка открытия файла макросаsend.txt

Сам батник

Windows Batch file
1
2
ftp -s:send.txt -i 192.168.0.101
pause

ну и в папке с батником лежит send.txt



0



4332 / 2122 / 661

Регистрация: 26.04.2015

Сообщений: 6,823

07.04.2016, 14:19

2

Цитата
Сообщение от mol2751
Посмотреть сообщение

ну и в папке с батником лежит send.txt

— не верю, проверил только что: нет файла, сразу пишет Ошибка открытия файла макросаsend.txt, есть — открывает.

Добавлено через 47 секунд
Проверьте наличие имя расширение.



0



10 / 10 / 3

Регистрация: 08.07.2015

Сообщений: 179

08.04.2016, 08:28

 [ТС]

3

Скопировал батник и файл на вторую машину с Вин8.1, там работает…. а на первой, так и не заводится….что за чудеса.

Добавлено через 16 минут
Так, победил это добро. Перенес файл txt в корень диска C, и батник его открыл. Если же ткст лежит в папке с батником, то ругается на невозможность открытия.



0



4332 / 2122 / 661

Регистрация: 26.04.2015

Сообщений: 6,823

08.04.2016, 12:17

4

mol2751, Видимо запуск где-то под админом, а где-то нет и поиск рядом с собой в папке запуска у админа (cmd из system32) пляшет от корня, а иначе достаточно папки в которой батник.

Добавлено через 1 минуту
полный путь к txt решил бы все проблемы, но я не знаю позволит ли это синтаксис ftp.



0



10 / 10 / 3

Регистрация: 08.07.2015

Сообщений: 179

08.04.2016, 12:20

 [ТС]

5

Полный путь пытался и так и сяк. Не кушает(
Да возможно дело с правами доступа, так как сам батник приходится запускать через пкм Запуск от администратора.



0



ComSpec

3455 / 1993 / 635

Регистрация: 26.02.2014

Сообщений: 1,457

08.04.2016, 18:14

6

Лучший ответ Сообщение было отмечено ComSpec как решение

Решение

Цитата
Сообщение от mol2751
Посмотреть сообщение

ну и в папке с батником лежит send.txt

Ну и пусть там и остаётся лежать.

Только код, выполнение которого не зависит от способа запуска пакетного файла, должен быть таким:

Windows Batch file
1
ftp -s:"%~dp0send.txt" -i 192.168.0.101

.



1



alpap

08.04.2016, 19:05

Не по теме:

Цитата
Сообщение от ComSpec
Посмотреть сообщение

«%~dp0send.txt»

— ага, значит путь можно все-таки задать, только правильно.



0



10 / 10 / 3

Регистрация: 08.07.2015

Сообщений: 179

11.04.2016, 08:38

 [ТС]

8

-s:»%~dp0send.txt»

Помогло! Спасибо!



0



Представляю вашему вниманию инструментарий для работы с файлами по FTP

Как известно, отправить файл на FTP сервер (или загрузить файл с FTP, создать папку на FTP сервере, и т.д.) можно при помощи таких API-функций из библиотеки wininet.dll, как FtpPutFile, FtpGetFile, FtpRenameFile, FtpDeleteFile, FtpRemoveDirectory, FtpCreateDirectory, FtpFindFirstFile и т.д.

Как именно использовать эти функции — можете посмотреть в коде надстройки для отправки файлов Excel на FTP сервер

В чем недостаток этого способа — так это в необходимости обеспечения совместимости кода с различными платформами.
В частности, чтобы код с функциями API работал и в Office 2010, и в 64-битной Windows, необходимо заметно увеличить объём кода. А, поскольку описание этих функций из wininet.dll и без того занимает много места (а универсальный код вообще займёт сотню строк), да и надо ещё и разбираться во всех этих функциях, т.к. в разных версиях Windows возможны различия в способе вызова функций из wininet.dll, и были созданы аналоги этих функций для работы с FTP, не использующие WinAPI

Сподвигла меня на это решение необходимость реализации средств обновления надстроек Excel, где необходимо было реализовать функционал отправки файлов Excel на FTP сервер, причем так, чтобы это стабильно работало на всех компьютерах. Попутно, кстати, родилась и функция загрузки файла с сервера без использования WinAPI, которая тоже вошла в состав данного инструментария.

Основу предлагаемого мной решения составляет модуль класса FTPcommander, который предоставляет вам следующие функции:

  • Function DownloadFile(ByVal FtpFolder$, ByVal FtpFilename$, ByVal LocalPath$) As Boolean
    (Функция скачивает файл с FTP-сервера с именем FtpFilename$ из папки FtpFolder$. Скачанный файл сохраняется на компьютере под именем (и по пути) LocalPath$. Функция возвращает TRUE, если загрузка файла завершилась успешно)
  • Function UploadFile(ByVal LocalPath$, Optional ByVal FtpFolder$, Optional ByVal FtpFilename$ = «») As String
    (Функция загружает файл LocalPath$ по FTP на сервер в папку FtpFolder$. Если задан параметр FtpFilename$, отправленный файл получает имя FtpFilename$. Функция возвращает ссылку на файл, если закачка файла завершилась успешно)
  • Function CreateNewFolder(ByVal FtpFolder$) As Boolean
    (Функция создаёт папку FtpFolder$ на FTP сервере. Возвращает TRUE, если папка была успешно создана, или существовала ранее)
  • Function DeleteFile(ByVal FtpFolder$, ByVal FtpFilename$) As Boolean
    (Функция создаёт папку FtpFolder$ на FTP сервере. Возвращает TRUE, если папка была успешно создана, или существовала ранее)
  • Function DownloadFileFromURL(ByVal URL$, ByVal LocalPath$) As Boolean
    (Функция скачивает файл по ссылке URL$, и сохраняет его по пути LocalPath$. Возвращает TRUE, если файл был успешно загружен)
  • Функция GetLastError возвращает информацию об ошибке, если некая функция была завершена некорректно (возвратила FALSE)

Дополнительно в составе модуля класса есть функции чтения и записи текстовых файлов ReadTXTfile и SaveTXTfile, а также функции перекодировки файлов и текста ChangeFileCharset и ChangeTextCharset

Как использовать модуль класса FTPcommander для работы с файлами по FTP:

1) Откройте прикреплённый к статье файл Excel, и мышом перетащите модуль класса FTPcommander в свой файл

2) Пропишите настройки FTP аккаунта в специальной функции, или сохраните их в реестре Windows
(подробнее об этом — ниже)

3) В своём макросе создаёте экземпляр класса FTPcommander, и используете его методы для работы с файлами
Создать экземпляр класса вам поможет следующий код:  Dim FTP As New FTPcommander
Примеры макросов отправки и скачивания файлов доступны в прикреплённом файле
(в модуле mod_TestFTP):

Вот один из примеров использования класса FTPcommander:

Private Sub ЗагрузкаФайлаНаFTPсервер()
    ' Этот макрос загружает файл "C:ПЖиВ.jpg" в корневую папку FTP сервера,
    ' переименовывая файл в "ER"
    Dim FTP As New FTPcommander
    Link$ = FTP.UploadFile("C:ПЖиВ.jpg", , "ER")
 
    ' В переменную Link$ возвращается ссылка вида "http://u3661.seiko.vps-private.net/ER",
    ' по которой доступен загруженный через FTP файл
End Sub

Как видите, всего 2 строки кода, — и ваш файл оказался загружен на FTP сервер.

Ещё один пример использования:

Private Sub ЗагрузкаСПоследующимСкачиваниемФайла()
    Dim FTP As New FTPcommander
    fn$ = "C:Documents and SettingsAdminРабочий столstamp.png"
 
    ' отправляем файл с рабочего стола на FTP сервер
    ' (на сервере файл получит имя "1 2 3.png")
    Link$ = FTP.UploadFile(fn$, , "1 2 3.png")
    If Len(Link$) Then
        Debug.Print "Загруженный файл доступен по ссылке: ", Link$
    Else
        Debug.Print "Ошибка: ", FTP.GetLastError
    End If
 
    ' а теперь скачиваем с сервера ранее загруженный файл "1 2 3.png"
    ' Скачанный файл окажется в той же папке (Рабочий стол),
    ' и получит имя "stamp.png222"
    res = FTP.DownloadFile("", "1 2 3.png", fn$ & "222")
    If res Then
        Debug.Print "Файл успешно загружен с FTP"
    Else
        Debug.Print "Ошибка: ", FTP.GetLastError
    End If
End Sub

Есть 2 способа задать настройки FTP аккаунта для использования объектом FTPcommander:

1 способ — один раз запустить макрос следующего вида:

Sub Save_FTP_Account_Information()    ' достаточно запустить ОДИН РАЗ!
    ' Cохраняем в реестре Windows настройки FTP-аккаунта по-умолчанию
    SaveSetting Application.Name, "FTP", "Host", "Имя или IP адрес сервера FTP"
    SaveSetting Application.Name, "FTP", "Login", "Имя пользователя (логин)"
    SaveSetting Application.Name, "FTP", "Password", "Пароль к FTP серверу"
    SaveSetting Application.Name, "FTP", "BaseFolder", "путь к стартовой папке, например, /www/"
    SaveSetting Application.Name, "FTP", "BaseURL", "http://Адрес Вашего Сайта, куда будут закачиваться файлы/"
End Sub

Этот макрос запишет все необходимые настройки в реестр Windows, и впоследствии будет брать их оттуда

Преимущество этого способа: один раз запустили макрос, потом удалили его, — и можно нигде в коде не прописывать секретные данные FTP аккаунта

Недостаток этого способа: при хранении настроек в реестре, возможен доступ только к одному FTP серверу

2 способ — для инициализации объекта FTPcommander использовать специальные функции с настройками:

Function MyFTPaccount() As FTPcommander
    ' возвращает объект типа FTPcommander, с нужными настройками
    Set MyFTPaccount = New FTPcommander
    With MyFTPaccount
        .Host = "Имя или IP адрес сервера FTP"
        .Login = "Имя пользователя (логин)"
        .Password = "Пароль к FTP серверу"
        .BaseFolder = "путь к стартовой папке, например, /www/"
        .BaseURL = "http://Адрес Вашего Сайта, куда будут закачиваться файлы/"
    End With
End Function

Пример использования функции:

Sub test()
    Dim FTP As FTPcommander    ' объявляем переменную
    Set FTP = MyFTPaccount    ' создаём объект с нужными настройками
    FTP.UploadFile ("C:123.jpg")    ' отправляем файл на сервер
End Sub

Преимущества этого способа: возможно работать с несколькими FTP серверами одновременно, конфиденциальные данные (настройки FTP аккаунта) не хранятся в открытом виде в реестре

Недостаток этого способа: настройки FTP аккаунта хранятся в коде VBA — если файл попадёт постороннему человеку, он легко сможет добраться до этих настроек (как известно, любые пароли на VBA ломаются за секунду)

На клиентской машине установлена Win7.
На сервере Ubuntu 14.04 c VSFTPD.
Когда на клиентской машине запускаю консоль и пытаюсь подсоединиться через FTP — получается.
Но хотелось бы автоматизировать действия и для этого сделал небольшой батник

ftp -s:enter.txt -i 192.168.5.3
cd 1C
mput C:UserssyaDesktopDocuments.rar

В той же папке, откуда я запускаю *.bat-файл лежит enter.txt со списком команд:

MyLogIn
MyPassword
cd 1C
mput C:UserssyaDesktopDocuments.rar

Но при запуске *.bat-файла мне консоль пишет:

C:Userssya>ftp -s:enter.txt -i 192.168.5.3
ошибка открытия файла макросаenter.txt

Обмен файлами с компьютером, на котором запущена служба
сервера FTP. FTP может использоваться интерактивно.

FTP [-v] [-d] [-i] [-n] [-g] [-s:имя_файла] [-a] [-A] [-x:sendbuffer]
    [-r:recvbuffer] [-b:asyncbuffers] [-w:windowsize] [узел]

Если же я пропишу жесткий путь

ftp -s:C:UserssyaDesktopenter.txt -i 192.168.5.3
cd 1C
mput C:UserssyaDesktopDocuments.rar

, то:

C:Userssya>ftp -s:"C:UserssyaDesktopenter.txt" -i 192.168.5.3
Связь с 192.168.5.3.
220 (vsFTPd 3.0.2)
Пользователь (192.168.5.3:(none)):
331 Please specify the password.

530 Login incorrect.
Сбой входа.
ftp> cd 1C
530 Please login with USER and PASS.
ftp> mput C:UserssyaDesktopDocuments.rar
C:UserssyaDesktopDocuments.rar:
ftp>

Пытался сделать так, как написано на stackoverflow, но что-то тоже не получилось.
И никак не могу определить, где я ошибся.

Страница 1 из 2


  1. Zel-Gr

    Zel-Gr
    New Member
    Пользователи

    Регистрация:
    16 июл 2014
    Сообщения:
    10

    Указаны все настройки по подключению, которые работают в FTP клиенте.
    При нажатии «Проверить соединение» следующая ошибка:Папки для загрузки менял и создавал для них разные доступы. Все равно ошибка.


  2. Root

    Root
    Администратор
    Администратор

    Регистрация:
    10 мар 2010
    Сообщения:
    14.818
    Город:
    Барнаул

    Здравствуйте.
    Какую рабочую папку указали?


  3. Root

    Root
    Администратор
    Администратор

    Регистрация:
    10 мар 2010
    Сообщения:
    14.818
    Город:
    Барнаул


  4. Zel-Gr

    Zel-Gr
    New Member
    Пользователи

    Регистрация:
    16 июл 2014
    Сообщения:
    10

    Папку: site.ru/public_html
    Пробывал: site.ru/public_html/cd. Пробелов в конце адреса нет.


  5. Root

    Root
    Администратор
    Администратор

    Регистрация:
    10 мар 2010
    Сообщения:
    14.818
    Город:
    Барнаул

    Попробуйте другой хостинг. У меня и у моих коллег работает хорошо. Тестировали много раз. В чем у вас проблема — непонятно. Судя по ошибке — не так указали рабочую папку…


  6. Root

    Root
    Администратор
    Администратор

    Регистрация:
    10 мар 2010
    Сообщения:
    14.818
    Город:
    Барнаул

    Если хотите, напишите мне в Skype, посмотрим по TeamViewer, что у вас там такое…


  7. Zel-Gr

    Zel-Gr
    New Member
    Пользователи

    Регистрация:
    16 июл 2014
    Сообщения:
    10

    Хостинг работает на VPS может ли быть дело в этом?
    Указывал конкретно:

    **Скрытое содержимое: доступно при наличии 1 постов.**


  8. Root

    Root
    Администратор
    Администратор

    Регистрация:
    10 мар 2010
    Сообщения:
    14.818
    Город:
    Барнаул

    Так мы будем только гадать…


  9. Zel-Gr

    Zel-Gr
    New Member
    Пользователи

    Регистрация:
    16 июл 2014
    Сообщения:
    10

    Решение было найдено.
    FTP доступ был на папку cd в public_html.
    Был создан FTP доступ на уровень выше и в названии папки поставлено только cd.
    Теперь работает!


  10. Zel-Gr

    Zel-Gr
    New Member
    Пользователи

    Регистрация:
    16 июл 2014
    Сообщения:
    10

    После установки соединения следующий вопрос:
    Как сделать так чтобы генерируемые .csv файлы которые находятся в папке на компьютере автоматически загружались в нужную папку на ftp заменяя файлы с таким же названием там?
    Сделать это при запуске программы.
    Насколько я успел узнать нужно сделать .bat файл и загрузить в программу.
    Как он должен выглядеть, что содержать?


  11. Root

    Root
    Администратор
    Администратор

    Регистрация:
    10 мар 2010
    Сообщения:
    14.818
    Город:
    Барнаул

    Функции работы с FTP создавались для автозагрузки туда картинок и файлов, скачанных макросом DOWNLOADFILE.
    Я могу лишь предложить дождаться нового макроса загрузки любых файлов с диска на FTP. По срокам ничего не могу сказать, но постараюсь сделать в ближайшие 1-2 недели…


  12. Zel-Gr

    Zel-Gr
    New Member
    Пользователи

    Регистрация:
    16 июл 2014
    Сообщения:
    10


  13. Zel-Gr

    Zel-Gr
    New Member
    Пользователи

    Регистрация:
    16 июл 2014
    Сообщения:
    10

    Уже можно использовать результат работ по созданию макроса загрузки любых файлов на FTP?


  14. Root

    Root
    Администратор
    Администратор

    Регистрация:
    10 мар 2010
    Сообщения:
    14.818
    Город:
    Барнаул

    Здравствуйте.

    Каюсь, но пока, увы, нет.


  15. Kreol

    Kreol
    Модератор
    Команда форума
    Модератор

    Регистрация:
    6 янв 2013
    Сообщения:
    2.645

    Если вам нужно загружать очень много файлов и больших объемов, загрузка через любой клиент будет намного быстрее. (filezilla, WinSCP)


  16. nail

    nail
    Member
    Пользователи

    Регистрация:
    15 сен 2014
    Сообщения:
    60

    Zel-Gr хочет наверное все-таки, чтобы автоматом после парсинга новый CSV на хост загружался поверх старого, либо в дополнение к существующему csv.
    А в самой CMS для импорта уже подхватываем CSV на выбор.
    Было бы замечательно. Меньше телодвижений filezilla, WinSCP.:blush:


  17. Root

    Root
    Администратор
    Администратор

    Регистрация:
    10 мар 2010
    Сообщения:
    14.818
    Город:
    Барнаул

    А вот это уже поинтереснее! =)
    Господин Zel-Gr, можно ли конкретизировать этот момент?
    Спасибо!


  18. Zel-Gr

    Zel-Gr
    New Member
    Пользователи

    Регистрация:
    16 июл 2014
    Сообщения:
    10

    Да, все верно насчет автоматом на хост с перезаписью.
    Допустим имеется несколько поставщиков у магазина. После парсинга программой по каждому создается файл CSV с заданным названием и загружается на хост, перезаписывая старый. Далее скрипт, добавленный в CRON, берет в определенное заданное время поочереди все эти файлы и загружает в базу изменения.
    Можно ли сделать так, чтобы после включения программы при нажатии одной кнопки парсилось по очереди несколько проектов?
    Тогда весь процесс:
    1. Включить программу
    2. Запустить задание на парсинг нескольких проектов за небольшое время до времени заданного CRON


  19. Root

    Root
    Администратор
    Администратор

    Регистрация:
    10 мар 2010
    Сообщения:
    14.818
    Город:
    Барнаул

    Большое спасибо за информацию!

    Для запуска очереди проектов используйте планировщик программы (соответствующая кнопка на панели инструментов главного окна программы).

    С уважением к вам, Сергей.


  20. kagorec

    kagorec
    Администратор
    Команда форума
    Администратор

    Ссылки недоступны для гостей -Ура обновление вышло, теперь можно контент грузить в любой движек (при обработчике на стороне сервера)!

Страница 1 из 2

Поделиться этой страницей


Форум по парсингу сайтов и интернет магазинов

Я пытаюсь использовать макрос teraterm в vxworks

как это. имя файла = test-mbedtls.ttl

sendln 'cmd'
wait '[vxWorks]#'
sendln 'ftp x.x.x.x'
wait UsernamePrompt

(xxxx это мой ip)

но результат

Ошибка открытия: (подключение: errno = 0x3e)

когда я ввел вручную ftp xxxx в терминале teraterm, он работает хорошо.

но при использовании макроса всегда печатается Open fail

я неправильно использую макрос?


Решенная проблема… Устройство нехорошее, поэтому мне нужно подождать секунды. Добавляю паузу 3, работает хорошо.

2019-12-01 06:14

Понравилась статья? Поделить с друзьями:
  • Ошибка открытия файла журнала установки проверьте что указанный файл
  • Ошибка открытия файла журнала установки проверьте наличие данного файла
  • Ошибка открытия файла документа t flex
  • Ошибка открытия файла для чтения xls 1с
  • Ошибка открытия файла в ворде как быть