Scaricatu un torrent 16GB via una tableta cù 4GB di spaziu liberu
Un compitu:
Ci hè un PC senza Internet, ma hè pussibule di trasfiriri u schedariu via USB. Ci hè una tavuletta cù Internet da quale stu schedariu pò esse trasferitu. Pudete scaricà u torrent necessariu nantu à a vostra tableta, ma ùn ci hè micca abbastanza spaziu liberu. U schedariu in u torrent hè unu è grande.
Percorsu per a suluzione:
Aghju cuminciatu u torrent per scaricà. Quandu u spaziu liberu era quasi sparitu, aghju pausa u scaricamentu. Aghju cunnessu a tableta à u PC è trasfirìu u schedariu da a tableta à u PC. Aghju fattu una pausa è à a mo sorpresa, u schedariu hè statu creatu di novu è u torrent hà cuntinuatu à scaricà cum'è s'ellu ùn era nunda.
A causa di u fattu chì u cliente torrent mette a bandiera sparse à u schedariu in u quale scrive i dati ricevuti, u sistema ùn prova micca di riservà 16GB à una volta è un errore ùn accade micca quandu pruvate di scrive à un schedariu oltre 4GB.
Dopu avè ripetutu a prucedura quattru volte, aghju ricevutu quattru schedari nantu à u mo PC chì cuntenenu diverse parti di u stessu torrent. Avà tuttu ciò chì resta hè di mette inseme. A prucedura hè essenzialmente simplice. Avete bisognu di rimpiazzà u cero byte cù un altru valore s'ellu esiste in una pusizione data in unu di i quattru schedari.
Mi paria chì un prugramma cusì simplice deve esse in Internet. Nimu ùn hà mai scontru un tali prublema? Ma aghju capitu chì ùn sò mancu sapè chì parole chjave per circà. Per quessa, aghju creatu rapidamente un script Lua per questu compitu è avà l'aghju ottimisatu. Questu hè ciò chì vogliu sparte.
Scaricamentu di u torrent in parte
cumincià à scaricà u torrent in u primu dispositivu
aspettate finu à chì a ROM hè piena
mette in pausa u scaricamentu
trasfiriri u schedariu à u sicondu dispusitivu è aghjunghje un numeru à u nome di u schedariu
turnemu à u primu puntu finu à chì u schedariu hè telecaricatu cumplettamente
Unisce e parti in un schedariu
Dopu chì l'ultima parte hè stata ricevuta, hè necessariu di cullà in un schedariu sanu.
U compitu hè simplice:
Leghje tutte e parti in una volta
Se in qualchì parte a pusizioni ùn hè micca un byte cero, allora scrivimu à l'output, altrimente scrivemu cero
funziunava merge_part accetta una serie di fili streams_in di quale leghje una parte di grandezza buffer_length è torna u risultatu di fusione di parti da diverse fili.
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
--[[
funziunava string.gsub hè adattatu per u compitu perchè truvà pezzi pieni di zeri è furnisce ciò chì hè datu.
--]]
out_part = out_part:gsub(" +", function(zero_string)
if #in_part < find_index then
return -- не на что менять
end
--[[
string.gsub ùn trasmette micca a pusizione induve a partita hè stata trovata. Dunque, facemu una ricerca parallela per a pusizione zero_string usendu a funzione string.find. Hè abbastanza per truvà u primu byte zero.
Avà si in in_part ci sò dati per out_part copiali.
--]]
if #in_part >= start_index then
local end_index = start_index + #zero_string - 1
--[[
Tagliate da in_part parte chì currisponde à a sequenza di zeri.
--]]
local part = in_part:sub(start_index, end_index)
if (part:byte(1) ~= 0) or part:find("[^ ]") then
--[[
В part ci sò dati.
--]]
if #part == #zero_string then
return part
else
--[[
part risultava esse menu di una sequenza di zeri. Fighjemu cun elli.
--]]
return part..zero_string:sub(1, end_index - #in_part)
end
end
end
end)
end
end
end
return out_part
end
cunchiusioni
Cusì, avemu pussutu scaricà è assemblà stu schedariu nant'à un PC. Dopu à a fusione, aghju cacciatu u schedariu torrent da a tableta. Aghju installatu un cliente torrent in u mo PC è verificatu u schedariu cun ellu.
L'ultima parte telecaricata nantu à a tavuletta pò esse lasciata nantu à a distribuzione, ma avete bisognu di attivà a ricuperazione di e parti prima di questu è deseleche u schedariu per ùn esse scaricatu di novu.