|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Патчер торрентов (AutoIt некорректно вносит изменения в торрент файлы) |
|
|
[решено] Патчер торрентов (AutoIt некорректно вносит изменения в торрент файлы)
|
Новый участник Сообщения: 5 |
Профиль | Отправить PM | Цитировать Необходимо внести изменения в торрент файл (добавить ретрекер). Для начала пробую с помощью AutoIt (3.3.6.0) открыть файл и без изменений скопировать содержимое в новый файл.
$file = FileOpen("E:\tor.torrent") dim $line[200] dim $nl While 1 $line[$nl] = FileReadLine($file) If @error = -1 Then ExitLoop $nl=$nl+1 Wend FileClose($file) $file = FileOpen("E:\tor.torrent", 2) for $a=0 to $nl-1 FileWriteLine($file, $line[$a]) next FileClose($file) Библиотечные функции теряют в процессе выполнения скрипта почти все содержимое торрент файла. Например #Include <File.au3> Dim $aRecords _FileReadToArray("E:\tor.torrent",$aRecords) _FileWriteFromArray("E:\tor2.torrent",$aRecords,1) Подскажите решение проблемы. Спасибо |
|
Отправлено: 10:46, 17-04-2010 |
Старожил Сообщения: 367
|
Профиль | Отправить PM | Цитировать торрент файл не текст. поэтому для него символ перевода каретки даже если и есть то только потому, что это какой-нибудь байт от другого блока данных.
другими словами, надо считывать файл в двоичном виде. записывать тоже. $file = FileOpen("E:\tor.torrent", 16 + 0) $iSize = FileGetSize("E:\tor.torrent") $dim = Int($iSize/100) + 1 dim $line[$dim] dim $nl While 1 $line[$nl] = FileRead($file, 100) If @error = -1 Then ExitLoop $nl=$nl+1 Wend FileClose($file) $file = FileOpen("E:\tor.torrent", 16 + 2) for $a=0 to $nl-1 FileWrite($file, $line[$a]) next FileClose($file) |
------- Отправлено: 11:14, 17-04-2010 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 812
|
Профиль | Отправить PM | Цитировать vkupriyanov,
kaster, А у меня так работает: $sFile = @ScriptDir & '\1.torrent' $sFile_new = @ScriptDir & '\2.torrent' $hRead = FileOpen($sFile) $hWrite = FileOpen($sFile_new, 2) $Buf = FileRead($hRead) FileWrite($hWrite, $Buf) FileClose($hRead) FileClose($hWrite) А на Ваш код у меня SciTE ругается: Цитата:
|
|
Отправлено: 12:09, 17-04-2010 | #3 |
Старожил Сообщения: 367
|
Профиль | Отправить PM | Цитировать Цитата madmasles:
Цитата madmasles:
вот так будет правильнее $file = FileOpen("E:\tor.torrent", 16 + 0) $iSize = FileGetSize("E:\tor.torrent") $dim = Int($iSize/100) + 1 dim $line[$dim] dim $nl = 0 While 1 $sline = FileRead($file, 100) if @error = -1 then exitloop $line[$nl] = $sline $nl += 1 WEnd FileClose($file) $file = FileOpen("E:\tor.torrent", 16 + 2) for $a=0 to $nl-1 FileWrite($file, $line[$a]) next FileClose($file) |
||
------- Последний раз редактировалось kaster, 17-04-2010 в 13:07. Отправлено: 12:25, 17-04-2010 | #4 |
Старожил Сообщения: 367
|
Профиль | Отправить PM | Цитировать вот код добавляет трекер указанный в переменной $sNewTracker в общий список трекеров. если изначально в торрент-файле был всего один трекер то создает список трекеров из основного трекера и указанного трекера. если трекеров было изначально несколько то добавляет указанный в список последним
$sPath = "d:\tor1.torrent" $hFile = FileOpen($sPath, 0) $sLine = FileRead($hFile, 11); Read d8:announce $sNewTracker = 'http://mynewtrack.tr/passkey' $iTrackerSize = _SizeFinder($hFile) $sLine &= $iTrackerSize & ':' $sMainTracker = FileRead($hFile, $iTrackerSize) $sLine &= $sMainTracker $sDigit = Number(FileRead($hFile, 2)) If $sDigit = 10 Then $sLine &= '13:announce-listll' $sLine &= $iTrackerSize & ':' $sLine &= $sMainTracker $sLine &= 'el' $sLine &= StringLen($sNewTracker) & ':' $sLine &= $sNewTracker $sLine &= 'ee' & $sDigit $sLine &= FileRead($hFile) ElseIf $sDigit = 13 Then $sLine &= $sDigit $sLine &= FileRead($hFile, 16) $sLine &= FileRead($hFile, StringLen($iTrackerSize) + 1) $sLine &= FileRead($hFile, $iTrackerSize) While 1 $sID = FileRead($hFile, 2) If $sID = 'ee' Then ExitLoop $sLine &= $sID $iSize = _SizeFinder($hFile) $sLine &= $iSize & ':' $sLine &= FileRead($hFile, $iSize) WEnd $sLine &= 'el' $sLine &= StringLen($sNewTracker) & ':' $sLine &= $sNewTracker $sLine &= $sID $sLine &= FileRead($hFile) EndIf ConsoleWrite($sLine & @CRLF) FileWrite('d:\tor8.torrent', $sLine) Func _SizeFinder(ByRef $hFile) $sDigit = '' While 1 $tmp = FileRead($hFile, 1); Read 1st digit for tracker name size If $tmp = ':' Then ExitLoop $sDigit &= $tmp WEnd Return Number($sDigit) EndFunc |
|
------- Последний раз редактировалось kaster, 17-04-2010 в 19:49. Отправлено: 19:35, 17-04-2010 | #5 |
Старожил Сообщения: 367
|
Профиль | Отправить PM | Цитировать а чем не устроила функция добавления трекеров, которая присутствует во мгоих клиентах?
|
------- Отправлено: 19:54, 17-04-2010 | #6 |
Новый участник Сообщения: 5
|
Профиль | Отправить PM | Цитировать madmasles, Ваш код мне подошел.
kaster, спасибо, что указали на различие в деле добавления возврата каретки в случае использования FileWriteLine. В русскоязычной справке от Valery Ivanov о FileWriteLine написано Цитата:
В оригинальной справке, идущей с версией 3.3.6.0: Цитата:
Цитата kaster:
Цитата:
Цитата kaster:
Вот примерный код, которым вношу изменения торрент файл (помещаю новый анонс-лист со списком трекеров перед фразой "7:comment" $hRead = FileOpen("E:\tor.torrent") $hWrite = FileOpen("E:\tor2.torrent", 2) $Buf = FileRead($hRead) $location=StringInStr($Buf, "7:comment") $Buf=StringLeft($Buf,$location-1) & "13:announce-listll32:http://normex.no-ip.org/announceel31:http://retracker.local/announceee" & StringMid($Buf,$location) FileWrite($hWrite, $Buf) FileClose($hRead) FileClose($hWrite) p.s. kaster последний присланный Вами код изучаю Цитата kaster:
|
||||||
Отправлено: 20:07, 17-04-2010 | #7 |
Старожил Сообщения: 367
|
Профиль | Отправить PM | Цитировать Цитата vkupriyanov:
Цитата vkupriyanov:
Цитата vkupriyanov:
|
|||
------- Отправлено: 01:01, 18-04-2010 | #8 |
Новый участник Сообщения: 5
|
Профиль | Отправить PM | Цитировать Спасибо.
На счет анонс-листов я погорячился. Он всегда должен быть один. Если добавить второй, то он не отобразится в свойствах торрента, загруженного в uTorrent и, наверное, не будет работать. Тему закрою. |
Отправлено: 14:18, 18-04-2010 | #9 |
Старожил Сообщения: 367
|
Профиль | Отправить PM | Цитировать vkupriyanov, так я не понял, мой скрипт тебе подошел или нет? я пробовал на своем клиенте, трекер исправно добавляется в список трекеров, неважно был там один или изначально несколько
|
------- Отправлено: 15:24, 18-04-2010 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Торрент загружает ненужные файлы | El Scorpio | Хочу все знать | 5 | 04-03-2013 15:02 | |
Как сделать чтобы Autoit создавал исполняемые файлы | wwe | AutoIt | 3 | 15-04-2010 15:18 | |
Аддоны - [addon] Патчер ресурсов архиватора 7z. | katok888 | Оформление Windows XP | 5 | 12-07-2009 10:35 | |
Тормоза в играх при скачивании торрентов | Analog | Непонятные проблемы с Железом | 17 | 15-01-2009 23:00 | |
Тихий патчер | GrandCat | Автоматическая установка Windows 2000/XP/2003 | 0 | 09-04-2006 16:12 |
|