Имя: Пароль:
IT
 
Можно ли использовать 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 отрубился.
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан