Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] Закачка куска файла через InetGet (http://forum.oszone.net/showthread.php?t=144277)

FlatX007 05-07-2009 16:00 1159433

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

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

Creat0R 05-07-2009 17:32 1159493

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

proxy 05-07-2009 17:39 1159498

FlatX007, посмотри описание функции:
Цитата:

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

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

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

Creat0R 05-07-2009 18:13 1159521

Цитата:

Цитата proxy
посмотри описание функции: »

Afaik, она не позволяет докачивать файл.

FlatX007 05-07-2009 18:14 1159522

Цитата:

Цитата proxy
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 1159534

Цитата:

Цитата FlatX007
Вот что придумал »

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

proxy 05-07-2009 18:50 1159539

Цитата:

Цитата Creat0R
Я если честно, логики не вижу - Зачем качать часть файла для проверки совпадения имени, когда его имя заранее уже известно ($sFileName)? »

FlatX007, ОЧНИСЬ _))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
Ты же, уже когда скачиваешь - указываешь КАКОЙ именно файл качаешь )))))))))))))))))))))))))))
Т.е. - достаточно вообще проверить - качается или нет, и если нет - то далее по списку .............

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

FlatX007 05-07-2009 19:18 1159553

Да неизвесно имя файла .... извесно только Setup_1.exe ... если он есть проверяется Setup_2.exe и так далее... до самого большого числа хоть : Setup_100.exe

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

proxy 05-07-2009 19:27 1159562

Цитата:

Цитата FlatX007
вы думаете я совсем ужо ... »

да нет, за чем же :) просто бывает плющит ...меня например ))

Цитата:

Цитата FlatX007
Да неизвесно имя файла .... извесно только Setup_1.exe ... если он есть проверяется Setup_2.exe и так далее... до самого большого числа хоть : Setup_100.exe »

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

SyDr 05-07-2009 19:42 1159579

FlatX007, признайся честно, тебе нужно найти $Number, где $Number максимально возможное?

$FileName & $Number & FileExt

FlatX007 05-07-2009 20:43 1159628

Вы меня достать решили ... в шапке всё написанно.

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

SyDr 05-07-2009 20:58 1159641

Тебя мы достать не решили. Дело в том, что таким образом сформулированные запросы похожи на то, не знаю, что.

$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 1159691

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

Цитата:

Цитата FlatX007
проверить имя файла - если совпадает - скачать заного и полностью. »

Тут не указано с чем совпадает. Поэтому и пошли догадки.

FlatX007 05-07-2009 23:26 1159719

Ну да ладно пусть я виноватым останусь :dont-know

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

Creat0R 05-07-2009 23:36 1159730

Цитата:

Цитата FlatX007
пусть я виноватым останусь »

Тут не вопрос в том кто виноват, просто на будущее - нужно правильно излагать свою проблему.

SyDr 06-07-2009 11:59 1160008

FlatX007, если то, что написал я подходит, то вряд ли у тебя получится проще.

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

FlatX007 06-07-2009 19:58 1160453

Возможно ктото... :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 1160633

Цитата:

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

жжошь :shot: :shocked: :lol: :lamer: :wow: :wild: :boast: :durak: :laugh: :ninja2:

Creat0R 07-07-2009 00:06 1160640

proxy, заканчивай оффтопить :off: .


Время: 16:49.

Время: 16:49.
© OSzone.net 2001-