ProHoster > Blogi > antaminen > 16 Gt:n torrentin lataaminen tabletilla, jossa on 4 Gt vapaata tilaa
16 Gt:n torrentin lataaminen tabletilla, jossa on 4 Gt vapaata tilaa
tavoite:
On PC ilman Internetiä, mutta on mahdollista siirtää tiedosto USB:n kautta. Internetissä on tabletti, josta tämä tiedosto voidaan siirtää. Voit ladata vaaditun torrentin tablet-laitteellesi, mutta vapaata tilaa ei ole tarpeeksi. Torrentissa oleva tiedosto on yksi ja suuri.
Polku ratkaisuun:
Aloitin torrentin lataamisen. Kun vapaa tila oli melkein loppunut, keskeytin latauksen. Yhdistin tabletin tietokoneeseen ja siirsin tiedoston tabletista tietokoneeseen. Pysähdyin ja yllätyksekseni tiedosto luotiin uudelleen ja torrent jatkoi lataamista kuin mitään ei olisi tapahtunut.
Koska torrent-asiakas asettaa harvan lipun tiedostolle, johon se kirjoittaa vastaanotetut tiedot, järjestelmä ei yritä varata 16 Gt kerralla eikä virhettä tapahdu yritettäessä kirjoittaa yli 4 Gt:n tiedostoon.
Toistan toimenpiteen neljä kertaa, sain tietokoneelleni neljä tiedostoa, jotka sisälsivät saman torrentin eri osia. Nyt ei jää muuta kuin koota ne yhteen. Menettely on pohjimmiltaan yksinkertainen. Sinun on korvattava nolla tavu toisella arvolla, jos se on tietyssä paikassa yhdessä neljästä tiedostosta.
Minusta näytti, että tällaisen yksinkertaisen ohjelman pitäisi olla Internetissä. Eikö kukaan ole törmännyt tällaiseen ongelmaan? Mutta tajusin, etten edes tiedä, millä avainsanoilla etsiä sitä. Siksi loin nopeasti Lua-skriptin tätä tehtävää varten ja nyt olen optimoinut sen. Tämän haluan jakaa.
Torrentin lataus osissa
aloita torrentin lataaminen ensimmäiselle laitteelle
odota, kunnes ROM on täynnä
keskeytä lataus
siirrä tiedosto toiseen laitteeseen ja lisää numero tiedoston nimeen
palaamme ensimmäiseen kohtaan, kunnes tiedosto on ladattu kokonaan
Osien yhdistäminen yhdeksi tiedostoksi
Kun viimeinen osa on vastaanotettu, on tarpeen koota ne yhdeksi kokonaiseksi tiedostoksi.
Tehtävä on yksinkertainen:
Kaikkien osien lukeminen kerralla
Jos jossain osassa paikka ei ole nolla tavu, niin kirjoitetaan se ulostuloon, muuten kirjoitetaan nolla
Toiminto merge_part hyväksyy joukon säikeitä streams_in josta lukee osan koosta buffer_length ja palauttaa eri säikeiden osien yhdistämisen tuloksen.
function merge_part(streams_in, buffer_length)
local out_part
for _, stream in ipairs(streams_in) do
local in_part = stream:read(buffer_length)
if not out_part then
out_part = in_part -- просто копируем часть из первого файла
elseif in_part and #in_part > 0 then
if #out_part < #in_part then
out_part, in_part = in_part, out_part
end
if out_part ~= in_part -- данные различаются
and in_part:find("[^ ]") -- есть данные в in_part
and out_part:find(" ", 1, true) -- есть пустые места в out_part
then
local find_index = 1
--[[
Toiminto string.gsub sopii tehtävään, koska se löytää nollalla täytetyt palat ja toimittaa sen, mitä sille on annettu.
--]]
out_part = out_part:gsub(" +", function(zero_string)
if #in_part < find_index then
return -- не на что менять
end
--[[
string.gsub ei kerro paikkaa, jossa ottelu löydettiin. Siksi teemme paikan rinnakkaisen haun zero_string funktiota käyttämällä string.find. Riittää, kun löytää ensimmäinen nollatavu.
Jos nyt sisään in_part varten on dataa out_part kopioi ne.
--]]
if #in_part >= start_index then
local end_index = start_index + #zero_string - 1
--[[
Leikattu in_part osa, joka vastaa nollien sarjaa.
--]]
local part = in_part:sub(start_index, end_index)
if (part:byte(1) ~= 0) or part:find("[^ ]") then
--[[
В part dataa on.
--]]
if #part == #zero_string then
return part
else
--[[
part osoittautui pienemmäksi kuin nollien sarja. Täydennetään sitä niillä.
--]]
return part..zero_string:sub(1, end_index - #in_part)
end
end
end
end)
end
end
end
return out_part
end
Johtopäätös
Näin ollen pystyimme lataamaan ja kokoamaan tämän tiedoston PC:lle. Sulautumisen jälkeen vedin torrent-tiedoston ulos tabletista. Asensin torrent-asiakkaan tietokoneelleni ja tarkistin tiedoston sillä.
Tabletin viimeksi ladattu osa voidaan jättää jakeluun, mutta sinun on otettava osien uudelleentarkistus käyttöön ennen tätä ja poistettava tiedoston valinta, jotta sitä ei ladata uudelleen.