ProHoster > Blog > administratë > Shkarkimi i një torrent 16 GB përmes një tableti me 4 GB hapësirë të lirë
Shkarkimi i një torrent 16 GB përmes një tableti me 4 GB hapësirë të lirë
Një detyrë:
Ekziston një kompjuter pa internet, por është e mundur të transferohet skedari përmes USB. Ekziston një tablet me internet nga i cili mund të transferohet ky skedar. Mund të shkarkoni torrentin e kërkuar në tabletin tuaj, por nuk ka hapësirë të mjaftueshme të lirë. Skedari në torrent është një dhe i madh.
Rruga drejt zgjidhjes:
Fillova torrentin për të shkarkuar. Kur hapësira e lirë pothuajse ishte zhdukur, e ndalova shkarkimin. E lidha tabletin me PC dhe e zhvendosa skedarin nga tableti në PC. Unë ndalova dhe për habinë time skedari u krijua përsëri dhe torrenti vazhdoi shkarkimin sikur të mos kishte ndodhur asgjë.
Për shkak të faktit se klienti torrent vendos flamurin e rrallë në skedarin në të cilin shkruan të dhënat e marra, sistemi nuk përpiqet të rezervojë 16 GB menjëherë dhe nuk do të ndodhë një gabim kur përpiqeni të shkruani në një skedar përtej 4 GB.
Pasi e përsërita procedurën katër herë, mora katër skedarë në kompjuterin tim që përmbanin pjesë të ndryshme të të njëjtit torrent. Tani mbetet vetëm t'i bashkojmë ato. Procedura është në thelb e thjeshtë. Ju duhet të zëvendësoni bajtet zero me një vlerë tjetër nëse ajo ekziston në një pozicion të caktuar në një nga katër skedarët.
Më dukej se një program kaq i thjeshtë duhet të ishte në internet. Askush nuk ka hasur ndonjëherë në një problem të tillë? Por kuptova që as nuk di se çfarë fjalë kyçe të kërkoj. Prandaj, unë shpejt krijova një skript Lua për këtë detyrë dhe tani e kam optimizuar atë. Kjo është ajo që dua të ndaj.
Shkarkimi i torrentit në pjesë
filloni të shkarkoni torrent në pajisjen e parë
prisni derisa ROM-i të mbushet
ndaloni shkarkimin
transferoni skedarin në pajisjen e dytë dhe shtoni një numër në emrin e skedarit
kthehemi në pikën e parë derisa skedari të shkarkohet plotësisht
Bashkimi i pjesëve në një skedar
Pasi të jetë marrë pjesa e fundit, është e nevojshme t'i grumbulloni ato në një skedar të tërë.
Detyra është e thjeshtë:
Leximi i të gjitha pjesëve në të njëjtën kohë
Nëse në një pjesë pozicioni nuk është një bajt zero, atëherë e shkruajmë atë në dalje, përndryshe shkruajmë zero
Funksion merge_part pranon një grup fijesh streams_in nga të cilat lexohet një pjesë e madhësisë buffer_length dhe kthen rezultatin e bashkimit të pjesëve nga fije të ndryshme.
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
--[[
Funksion string.gsub është i përshtatshëm për detyrën sepse do të gjejë copa të mbushura me zero dhe do të japë atë që i jepet.
--]]
out_part = out_part:gsub(" +", function(zero_string)
if #in_part < find_index then
return -- не на что менять
end
--[[
string.gsub nuk përcjell pozicionin në të cilin është gjetur ndeshja. Prandaj, ne bëjmë një kërkim paralel për pozicionin zero_string duke përdorur funksionin string.find. Mjafton të gjesh bajtin e parë zero.
Tani nëse në in_part ka të dhëna për out_part kopjoni ato.
--]]
if #in_part >= start_index then
local end_index = start_index + #zero_string - 1
--[[
Prerë nga in_part pjesë që korrespondon me sekuencën e zerove.
--]]
local part = in_part:sub(start_index, end_index)
if (part:byte(1) ~= 0) or part:find("[^ ]") then
--[[
В part ka të dhëna.
--]]
if #part == #zero_string then
return part
else
--[[
part doli të ishte më pak se një sekuencë zerosh. Le ta plotësojmë me to.
--]]
return part..zero_string:sub(1, end_index - #in_part)
end
end
end
end)
end
end
end
return out_part
end
Përfundim
Kështu, ne mundëm ta shkarkonim dhe ta montonim këtë skedar në një kompjuter. Pas bashkimit, nxora skedarin torrent nga tableti. Unë instalova një klient torrent në kompjuterin tim dhe kontrollova skedarin me të.
Pjesa e fundit e shkarkuar në tablet mund të lihet në shpërndarje, por ju duhet të aktivizoni ri-kontrollin e pjesëve përpara kësaj dhe zgjidhni skedarin në mënyrë që të mos shkarkohet më.