PDA

Показать полную графическую версию : [решено] Закачка куска файла через InetGet


FlatX007
05-07-2009, 16:00
Вобщем мне нужно начать закачку файла, например закачать 100Байт в папку ТЕМП - оборвать закачку - проверить имя файла - если совпадает - скачать заного и полностью.

Можно сделать ? ... я просто неразу незанимался этим, в голову ничё нелезет.

Creat0R
05-07-2009, 17:32
Могу только навести на верное(?) направление - TCP*. На большее времени пока нет :)

proxy
05-07-2009, 17:39
FlatX007, посмотри описание функции:
InetGet ( "URL", "filename" [, reload [, background]] )
URL: Значение URL загружаемого файла. См. замечания.
...
background:
0 = (стандартное значение) Ожидать момента окончания загрузки и лишь затем продолжить выполнение.
1 = Немедленно продолжить выполнение. Загрузка будет проводиться в фоновом режиме. См замечания.


1. Что бы закачать файл из интернет - обязательно знать его имя (полный адрес).

2. А если необходимо проверить какие то данные в скачанном файле, то думаю врядтли он откроется корректно, если его докачать только наполовину.
Т.е. качать необходимо полностью: InetGet или, если необходимо только прочитать содержимое _INetGetSource.

3. В любом случае, если выполнение скрипта происходит стандартными функциями AutoIt, а не работа через WinApi и подобное. То тут уж вариант прерывания сложный - если выполняемая функция не поддерживает прерывание, и её выполнение занимает длительное время, то, думаю, легче на выполнение данных задач - запускать отдельный скрипт, который будет передовать (хотя не обязательно) данные в главный скрипт - вот его процес прервать то можно )

Creat0R
05-07-2009, 18:13
посмотри описание функции: »
Afaik, она не позволяет докачивать файл.

FlatX007
05-07-2009, 18:14
2. А если необходимо проверить какие то данные в скачанном файле, то думаю врядтли он откроется корректно, если его докачать только наполовину. »

Мне нужно найти "наибольший" файл по названию.

Setup_1.exe
Setup_2.exe
Setup_3.exe

Помойму достаточно скачать один килобайт ,что бы проверить имя файла :)
Или может подругому можно ???

Вот что придумал (ну или малец позаимствовал :) )


$sUrl_File = "http://ляля/Setup_1.exe"

Global $sFileName = StringRegExpReplace($sUrl_File, "^.*/", "")
Global $sFilePath = @TempDir & "\" & $sFileName

InetGet($sUrl_File, $sFilePath, 1, 1)

While @InetGetActive
If @InetGetBytesRead > 10 Then InetGet("Abort")
Wend

Creat0R
05-07-2009, 18:40
Вот что придумал »
Я если честно, логики не вижу :dont-know - Зачем качать часть файла для проверки совпадения имени, когда его имя заранее уже известно ($sFileName)? :)

proxy
05-07-2009, 18:50
Я если честно, логики не вижу - Зачем качать часть файла для проверки совпадения имени, когда его имя заранее уже известно ($sFileName)? »
FlatX007, ОЧНИСЬ _))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
Ты же, уже когда скачиваешь - указываешь КАКОЙ именно файл качаешь )))))))))))))))))))))))))))
Т.е. - достаточно вообще проверить - качается или нет, и если нет - то далее по списку .............

FlatX007, но, если уж очень нужны несколько байт файла, то скрипт этот самое то.

FlatX007
05-07-2009, 19:18
Да неизвесно имя файла .... извесно только Setup_1.exe ... если он есть проверяется Setup_2.exe и так далее... до самого большого числа хоть : Setup_100.exe

Это я для примера - я дальше ещё не придумал, вы думаете я совсем ужо ...

proxy
05-07-2009, 19:27
вы думаете я совсем ужо ... »
да нет, за чем же :) просто бывает плющит ...меня например ))

Да неизвесно имя файла .... извесно только Setup_1.exe ... если он есть проверяется Setup_2.exe и так далее... до самого большого числа хоть : Setup_100.exe »
ну так вот, значит схема такая: начала скачивания файла Setup_1.exe - ЕСЛИ ОН скачивается (нет ошибок) ЗНАЧИТ ИМЯ ФАЙЛА = Setup_1.exe
т.е - нет необходимости проверять на диске имя файла, уже и так известно же ...

SyDr
05-07-2009, 19:42
FlatX007, признайся честно, тебе нужно найти $Number, где $Number максимально возможное?

$FileName & $Number & FileExt

FlatX007
05-07-2009, 20:43
Вы меня достать решили ... в шапке всё написанно.

Sylver Dragon - да имеено так (без лишних вопросов это хорошо)

SyDr
05-07-2009, 20:58
Тебя мы достать не решили. Дело в том, что таким образом сформулированные запросы похожи на то, не знаю, что.

$FileFirstPath = "http://somesite.net/setup_"
$FileEndPart = ".exe"

Не проверял (не знаю где), но должно работать. Вовзращает номер.
Func SearchMax($FileFirstPath, $FileEndPart, $MaxNumber = 1024)
Local $MinNumber = 1
Local $CurrentNumber = Floor(($MaxNumber + $MinNumber) / 2)

While 1
If InetGetSize($FileFirstPath & $CurrentNumber & $FileEndPart) Then
$MinNumber = $CurrentNumber
$CurrentNumber = Floor(($MaxNumber + $MinNumber) / 2)
Else
$MaxNumber = $CurrentNumber
$CurrentNumber = Floor(($MaxNumber + $MinNumber) / 2)
EndIf
If $MinNumber = $maxHumber Then Return $MinNumber
WENd
EndFunc

Creat0R
05-07-2009, 22:37
FlatX007, Не вводите в заблуждение людей, в первом сообщение вообще не указано о том что проверять нужно файл в сети...

проверить имя файла - если совпадает - скачать заного и полностью. »
Тут не указано с чем совпадает. Поэтому и пошли догадки.

FlatX007
05-07-2009, 23:26
Ну да ладно пусть я виноватым останусь :dont-know

Кстати решение Sylver Dragon`a навело меня на довольно простое решение ... щас над ним бъюсь.
Завтра опубликую што я там напридумывал.

Creat0R
05-07-2009, 23:36
пусть я виноватым останусь »
Тут не вопрос в том кто виноват, просто на будущее - нужно правильно излагать свою проблему.

SyDr
06-07-2009, 11:59
FlatX007, если то, что написал я подходит, то вряд ли у тебя получится проще.

Надеюсь, что успею сегодня увидеть твоё решение. Просто меня какое-то время здесь не будет. Хотя, наверное, периодически заходить смогу.

FlatX007
06-07-2009, 19:58
Возможно ктото... :sorry: был прав что я неправильно описал проблему - вот скрипт который был мне нужен

$VerIni = @ScriptDir & '\Ver.ini'
$Read_Ver_Launcher = IniRead($VerIni, "Setting","Version launcher", "0")
$Read_Ver_sXe = IniRead($VerIni, "Setting", "Version sXe", "0")
$Read_Update = IniRead($VerIni, "Setting", "Update", "0")

$File_Name = "Launcher.exe"

For $i = $Read_Update to 30 Step 1
Sleep(100)
$sUrl_File = "http://cstrike.****.net/update/launcher/Launcher_" & $i & ".exe"

$sFileName = StringRegExpReplace($sUrl_File, "^.*/", "")
$sFilePath = @TempDir & "\" & $sFileName
InetGet($sUrl_File, $sFilePath, 1, 1)

While @InetGetActive
If @InetGetBytesRead > 100 Then InetGet("Abort")
Wend

If FileGetSize(@TempDir & "\" & $sFileName) > 0 Then ; Если размер файла больше нуля то ...
$New_File_Ver_Launcher = $i
; Если индекс скаченной версии больше индекса версии в INI то даём команду на закачку
If $New_File_Ver_Launcher > $Read_Ver_Launcher Then
IniWrite($VerIni, "Setting", "Update", $New_File_Ver_Launcher) ; Записываем последнюю скаченную версию что бы вследущий раз с неё начать проверку
IniWrite($VerIni, "Setting", "Version launcher", $New_File_Ver_Launcher)
InetGet($sUrl_File, @ScriptDir & "\" & $File_Name, 1, 0)
EndIf

ExitLoop
EndIf
Next

Ver.ini
[Setting]
Version sXe=0
Version launcher=0
Update=0

Но потом меня осенило (снизошло прозрение) а почему бы не закачать на сервер INI файл в котором будет содержатся информация о новых обновлениях.
Кароче нужда в скрипте отпала ...

proxy
06-07-2009, 23:57
Но потом меня осенило (снизошло прозрение) а почему бы не закачать на сервер INI файл в котором будет содержатся информация о новых обновлениях.
Кароче нужда в скрипте отпала ... »
жжошь :shot: :shocked: :lol: :lamer: :wow: :wild: :boast: :durak: :laugh: :ninja2:

Creat0R
07-07-2009, 00:06
proxy, заканчивай оффтопить :off: .




© OSzone.net 2001-2012