Показать полную графическую версию : [решено] Закачка куска файла через InetGet
FlatX007
05-07-2009, 16:00
Вобщем мне нужно начать закачку файла, например закачать 100Байт в папку ТЕМП - оборвать закачку - проверить имя файла - если совпадает - скачать заного и полностью.
Можно сделать ? ... я просто неразу незанимался этим, в голову ничё нелезет.
Могу только навести на верное(?) направление - TCP*. На большее времени пока нет :)
FlatX007, посмотри описание функции:
InetGet ( "URL", "filename" [, reload [, background]] )
URL: Значение URL загружаемого файла. См. замечания.
...
background:
0 = (стандартное значение) Ожидать момента окончания загрузки и лишь затем продолжить выполнение.
1 = Немедленно продолжить выполнение. Загрузка будет проводиться в фоновом режиме. См замечания.
1. Что бы закачать файл из интернет - обязательно знать его имя (полный адрес).
2. А если необходимо проверить какие то данные в скачанном файле, то думаю врядтли он откроется корректно, если его докачать только наполовину.
Т.е. качать необходимо полностью: InetGet или, если необходимо только прочитать содержимое _INetGetSource.
3. В любом случае, если выполнение скрипта происходит стандартными функциями AutoIt, а не работа через WinApi и подобное. То тут уж вариант прерывания сложный - если выполняемая функция не поддерживает прерывание, и её выполнение занимает длительное время, то, думаю, легче на выполнение данных задач - запускать отдельный скрипт, который будет передовать (хотя не обязательно) данные в главный скрипт - вот его процес прервать то можно )
посмотри описание функции: »
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
Вот что придумал »
Я если честно, логики не вижу :dont-know - Зачем качать часть файла для проверки совпадения имени, когда его имя заранее уже известно ($sFileName)? :)
Я если честно, логики не вижу - Зачем качать часть файла для проверки совпадения имени, когда его имя заранее уже известно ($sFileName)? »
FlatX007, ОЧНИСЬ _))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
Ты же, уже когда скачиваешь - указываешь КАКОЙ именно файл качаешь )))))))))))))))))))))))))))
Т.е. - достаточно вообще проверить - качается или нет, и если нет - то далее по списку .............
FlatX007, но, если уж очень нужны несколько байт файла, то скрипт этот самое то.
FlatX007
05-07-2009, 19:18
Да неизвесно имя файла .... извесно только Setup_1.exe ... если он есть проверяется Setup_2.exe и так далее... до самого большого числа хоть : Setup_100.exe
Это я для примера - я дальше ещё не придумал, вы думаете я совсем ужо ...
вы думаете я совсем ужо ... »
да нет, за чем же :) просто бывает плющит ...меня например ))
Да неизвесно имя файла .... извесно только Setup_1.exe ... если он есть проверяется Setup_2.exe и так далее... до самого большого числа хоть : Setup_100.exe »
ну так вот, значит схема такая: начала скачивания файла Setup_1.exe - ЕСЛИ ОН скачивается (нет ошибок) ЗНАЧИТ ИМЯ ФАЙЛА = Setup_1.exe
т.е - нет необходимости проверять на диске имя файла, уже и так известно же ...
FlatX007, признайся честно, тебе нужно найти $Number, где $Number максимально возможное?
$FileName & $Number & FileExt
FlatX007
05-07-2009, 20:43
Вы меня достать решили ... в шапке всё написанно.
Sylver Dragon - да имеено так (без лишних вопросов это хорошо)
Тебя мы достать не решили. Дело в том, что таким образом сформулированные запросы похожи на то, не знаю, что.
$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
FlatX007, Не вводите в заблуждение людей, в первом сообщение вообще не указано о том что проверять нужно файл в сети...
проверить имя файла - если совпадает - скачать заного и полностью. »
Тут не указано с чем совпадает. Поэтому и пошли догадки.
FlatX007
05-07-2009, 23:26
Ну да ладно пусть я виноватым останусь :dont-know
Кстати решение Sylver Dragon`a навело меня на довольно простое решение ... щас над ним бъюсь.
Завтра опубликую што я там напридумывал.
пусть я виноватым останусь »
Тут не вопрос в том кто виноват, просто на будущее - нужно правильно излагать свою проблему.
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 файл в котором будет содержатся информация о новых обновлениях.
Кароче нужда в скрипте отпала ...
Но потом меня осенило (снизошло прозрение) а почему бы не закачать на сервер INI файл в котором будет содержатся информация о новых обновлениях.
Кароче нужда в скрипте отпала ... »
жжошь :shot: :shocked: :lol: :lamer: :wow: :wild: :boast: :durak: :laugh: :ninja2:
proxy, заканчивай оффтопить :off: .
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC