![]() |
![]() |
![]() |
|
Можно ли использовать InternetExplorer obj для работы с ftp?... | ☑ | ||
---|---|---|---|---|
0
WiFi 2
10.05.06
✎
14:56
|
Можно ли использовать InternetExplorer obj для работы с ftp?
Сайт ftp.blablabla.ru он открывает (с авторизацией), а дальше, видимо, ничего не сделаешь. Или я не прав? |
|||
1
Слоняра
10.05.06
✎
14:57
|
не прав :)
|
|||
2
WiFi 2
10.05.06
✎
15:01
|
(1) звучит классно ;)
весь вопрос в том, как дальше работать? |
|||
3
mos-ad
10.05.06
✎
15:05
|
ftp.exe
|
|||
4
WiFi 2
10.05.06
✎
15:11
|
(3) :)))
ftp.exe, к великому сожалению, не поддерживает пассивный режим :( |
|||
5
mos-ad
10.05.06
✎
15:20
|
||||
6
WiFi 2
10.05.06
✎
15:23
|
(5) спасибо, но мы удаляемся от вопроса ;)
ясно что можно и так сделать, хочется этот (см. subject) вариант разобрать. Если често, я уже использую один ftp клиент (nftpc.exe), но в некоторых моментах он меня не устраивает. Уверен, что и в dialmail своих плюсов и минусов хватает ;) |
|||
7
smaharbA
10.05.06
✎
15:51
|
Set ie = CreateObject("InternetExplorer.Application")
ie.navigate("ftp://" & login & ":" & pass & "@" & URL) do While ie.ReadyState<4 Wscript.Sleep 200 loop set doc=ie.document msgbox doc.folder.items().count for each c in doc.folder.items() msgbox c.path next |
|||
8
WiFi 2
10.05.06
✎
16:02
|
(7) проверил, работает ;)
правда, коллекции File (по аналогии с Folder) не нашел... :-/ Все таки, конечная цель, ясное дело, это скопировать/выгрузить файл. А где можно посмотреть свойства этого объекта (здесь ie.document)? Явно, это не HTMLDocument :) |
|||
9
smaharbA
10.05.06
✎
16:04
|
ishellfolderviewdual2
|
|||
10
WiFi 2
10.05.06
✎
16:21
|
(9) этот объект имеет отношение к этим?
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/programmersguide/shell_basics/shell_basics_programming/objectmap.asp Все пролистал, про файлы вообще речь не идет. ishellfolderviewdual2 не могу найти... |
|||
11
smaharbA
10.05.06
✎
16:28
|
obj.Application
obj.Folder obj.Parent obj.SelectedItems obj.FocusedItem obj.Script obj.ViewOptions ... но это сам документ, а темы его это FolderItem2 |
|||
12
smaharbA
10.05.06
✎
16:33
|
if c.IsFolder then msgbox c.GetFolder.items().count
|
|||
13
WiFi 2
10.05.06
✎
16:34
|
(11) smaharbA, скажи, а удастся скопировать файл из папки (в папку)? с помощью скрипта.
Или нечего возится? |
|||
14
smaharbA
10.05.06
✎
16:50
|
set s = CreateObject("ADODB.Stream")
s.Mode = 3 s.Type = 1 targetpath="c:\temp\temp\" set x =CreateObject("Microsoft.XMLHTTP") Set ie = CreateObject("InternetExplorer.Application") ie.navigate("ftp://" & login & ":" & pass & "@" & URL) do While ie.Busy Wscript.Sleep 200 loop set doc=ie.document msgbox doc.folder.items().count for each c in doc.folder.items() if c.IsFolder then 'msgbox c.GetFolder.items().count else call x.Open("GET", c.path, 0,login,password) x.Send() s.open() s.Write(x.responseBody) call s.SaveToFile(targetpath & c.name, 2) s.close() end if next |
|||
15
WiFi 2
10.05.06
✎
17:09
|
(14) круто ;)
Попробовал, но метод doc.folder.items() мне не вернул файлов :-/ По крайней мере в случае с ftp... Проверил, файл есть. Другие клиенты ftp его видят. Сейчас попробую явно указать. |
|||
16
WiFi 2
10.05.06
✎
17:15
|
(14) указал файл явно. В нашем случае archive.rar
Есть две новости, хорошая и плохая :) Хорошая - файл скачался, плохая - архив поврежден. |
|||
17
smaharbA
10.05.06
✎
17:15
|
(15) Можна "круче" и просче.
Set Shell = CreateObject("Shell.Application") URL="ftp://...." targetpath="c:\temp\temp\" Set Folder = Shell.NameSpace(targetpath) Set ie = CreateObject("InternetExplorer.Application") ie.navigate(URL) do While ie.Busy Wscript.Sleep 200 loop set doc=ie.document msgbox doc.folder.items().count for each c in doc.folder.items() if c.IsFolder then 'msgbox c.GetFolder.items().count else end if Folder.CopyHere c.path,1 next ... Все вместе с подкаталогами |
|||
18
smaharbA
10.05.06
✎
17:17
|
Тут проблемма, msgbox doc.folder.items().count не убирай или задержку поставь, пока не понятно как сделать типа реадистате
|
|||
19
WiFi 2
10.05.06
✎
17:19
|
(17) прикольно :)))
спасибо, сейчас попробую... как я смотрел? а CopyHere не увидел 0:-) |
|||
20
WiFi 2
10.05.06
✎
17:36
|
(17) не... не получается :(
CopyHere не срабатывает, хотя объект Folder есть. Воторой параметр тоже менял, пока результата нет. |
|||
21
WiFi 2
10.05.06
✎
17:39
|
(20) о! а сейчас заработало...
надо только в конце поставить WScript.Sleep на время, пока будет копироваться. Иначе отрубает. |
|||
22
WiFi 2
10.05.06
✎
17:48
|
(17) файл, если явно указать путь, тоже скачивается.
Хотя, метод doc.folder.items() так и не возвращает мне ссылки на файлы :-/ А у тебя возвращает? |
|||
23
smaharbA
10.05.06
✎
19:16
|
возвращает
вот только проблемма с копихере, как дождаться закачки файла знаю, а вот папки проблематично, хотя тоже можно |
|||
24
smaharbA
10.05.06
✎
19:59
|
on error resume next
set fso=CreateObject("Scripting.FileSystemObject") Set Shell = CreateObject("Shell.Application") URL="ftp://..." Set FolderP = Shell.NameSpace(URL) targetpath="c:\temp\temp\" Set Folder = Shell.NameSpace(targetpath) for each c in FolderP.items() if c.isFolder then call fso.deletefolder(targetpath & c.name,true) Folder.CopyHere c.path, 4+8+16 WScript.Sleep 200 set ff=fso.getfolder(targetpath) oldsize=0 do while (oldsize<>ff.size or ff.size=0) and c.GetFolder.items().count>0 wscript.sleep 100 set ff=fso.getfolder(targetpath) oldsize=ff.size wscript.sleep 200 loop else call fso.deletefile(targetpath & c.name,true) Folder.CopyHere c.path, 4 + 8 + 16 WScript.Sleep 200 oldsize=0 set fo=Shell.NameSpace(targetpath) set f=fo.parsename(c.name) do while (f.size<>oldsize or f.size=0) and c.size>0 set f=fo.parsename(c.name) oldsize=f.size wscript.sleep 200 loop end if next ... Но тут проблемма с тем если в папке есть элементы но их размер 0 |
|||
25
WiFi 2
10.05.06
✎
20:47
|
(23) да, у меня тоже возращает... иногда.
На локальной машине всегда, а вот на ftp я так и не понял - то есть, то нет. |
|||
26
WiFi 2
10.05.06
✎
22:15
|
(24) я, кстати, тоже до этого дошел. Не знаю на сколько это надежно получится в эксплуатации.
У меня вот так получилось: var objShell = new ActiveXObject("Shell.Application"); var objFolder = objShell.NameSpace('ftp://user:password@ftp.server.ru/pub/files'); objFolder.CopyHere('C:\\archive.rar'); WScript.Sleep(60000); // дадим время на копирование // время можно считать исходя из размера файла и средней скорости скачивания |
|||
27
smaharbA
10.05.06
✎
22:18
|
(26) Посмотри еще (24) повнимательнее там проверка сделана кой какая на предмет завершения скачки
|
|||
28
WiFi 2
10.05.06
✎
22:31
|
(27) заметил однако ;))
Сейчас сижу пробую... :) |
|||
29
WiFi 2
11.05.06
✎
10:35
|
smaharbA, а ты в курсе, что конструкция:
objFolder = objShell.NameSpace('ftp://<любой случайный текст>'); всегда возвращает не пустой объект! :) причем, если это действительно неправельный путь, то само собой Count=0. Теперь вопрос, как отличить что в нужной тебе папке нет файлов? Может ему просто не удалось подключится к ftp? ;) |
|||
30
The gray Cardinal
11.05.06
✎
12:33
|
Может, чем-то поможет такой пример:
http://forum.script-coding.info/topic.php?topic=32 |
|||
31
WiFi 2
11.05.06
✎
13:20
|
(30) спасибо :)
Этот вариант только для протокола http. Для ftp работать не будет, как мне кажется. |
|||
32
WiFi 2
11.05.06
✎
13:22
|
в (29) вопрос решается легко.
Можно положить в папку файл маячок и все ;) Если такой есть, значит подключились и смотрим остальные. Если остальных нет - значит их действительно нет, а не ftp отрубился. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |