Lawrlwytho torrent 16GB trwy dabled gyda 4GB o le rhydd
Tasg:
Mae PC heb y Rhyngrwyd, ond mae'n bosibl trosglwyddo'r ffeil trwy USB. Mae yna dabled gyda'r Rhyngrwyd y gellir trosglwyddo'r ffeil hon ohoni. Gallwch chi lawrlwytho'r torrent gofynnol ar eich tabled, ond nid oes digon o le am ddim. Mae'r ffeil yn y llifeiriant yn un a mawr.
Llwybr i ddatrysiad:
Dechreuais y torrent i'w lawrlwytho. Pan oedd y gofod rhydd bron wedi mynd, fe wnes i oedi'r lawrlwythiad. Cysylltais y tabled i'r PC a symudais y ffeil o'r tabled i'r PC. Oedais ac er mawr syndod i mi crëwyd y ffeil eto a pharhaodd y cenllif i lawrlwytho fel pe na bai dim wedi digwydd.
Oherwydd bod y cleient torrent yn gosod y faner denau i'r ffeil y mae'n ysgrifennu'r data a dderbyniwyd ynddi, nid yw'r system yn ceisio cadw 16GB ar unwaith ac ni fydd gwall yn digwydd wrth geisio ysgrifennu at ffeil y tu hwnt i 4GB.
Ar ôl ailadrodd y weithdrefn bedair gwaith, derbyniais bedair ffeil ar fy PC yn cynnwys gwahanol rannau o'r un llifeiriant. Nawr y cyfan sydd ar ôl yw eu rhoi at ei gilydd. Mae'r weithdrefn yn ei hanfod yn syml. Mae angen i chi ddisodli'r sero bytes â gwerth arall os yw'n bodoli mewn safle penodol yn un o'r pedair ffeil.
Roedd yn ymddangos i mi y dylai rhaglen mor syml fod ar y Rhyngrwyd. Onid oes neb erioed wedi dod ar draws problem o'r fath? Ond sylweddolais nad wyf hyd yn oed yn gwybod pa eiriau allweddol i chwilio amdano. Felly, creais sgript Lua yn gyflym ar gyfer y dasg hon ac yn awr rwyf wedi ei optimeiddio. Dyma beth rydw i eisiau ei rannu.
Lawrlwytho'r torrent mewn rhannau
dechreuwch lawrlwytho'r torrent ar y ddyfais gyntaf
aros nes bod y ROM wedi'i lenwi
oedi'r llwytho i lawr
trosglwyddwch y ffeil i'r ail ddyfais ac ychwanegu rhif at enw'r ffeil
dychwelwn i'r pwynt cyntaf nes bod y ffeil wedi'i lawrlwytho'n llwyr
Cyfuno rhannau i mewn i un ffeil
Ar ôl derbyn y rhan olaf, mae angen eu casglu mewn un ffeil gyfan.
Mae'r dasg yn syml:
Darllen pob rhan ar unwaith
Os nad yw'r sefyllfa mewn rhyw ran yn sero beit, yna rydyn ni'n ei ysgrifennu at yr allbwn, fel arall rydyn ni'n ysgrifennu sero
Swyddogaeth merge_part yn derbyn amrywiaeth o edafedd streams_in yr hwn sydd yn darllen dogn o faintioli buffer_length ac yn dychwelyd canlyniad uno rhannau o wahanol edafedd.
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
--[[
Swyddogaeth string.gsub yn addas ar gyfer y dasg oherwydd bydd yn dod o hyd i ddarnau wedi'u llenwi â sero ac yn cyflwyno'r hyn a roddir iddo.
--]]
out_part = out_part:gsub(" +", function(zero_string)
if #in_part < find_index then
return -- не на что менять
end
--[[
string.gsub nid yw'n cyfleu'r safle y daethpwyd o hyd iddo. Felly, rydym yn gwneud chwiliad cyfochrog am y sefyllfa zero_string defnyddio'r swyddogaeth string.find. Mae'n ddigon dod o hyd i'r sero beit cyntaf.
Nawr os i mewn in_part mae data ar gyfer out_part eu copïo.
--]]
if #in_part >= start_index then
local end_index = start_index + #zero_string - 1
--[[
Torri o in_part rhan sy'n cyfateb i'r dilyniant o sero.
--]]
local part = in_part:sub(start_index, end_index)
if (part:byte(1) ~= 0) or part:find("[^ ]") then
--[[
В part mae data.
--]]
if #part == #zero_string then
return part
else
--[[
part troi allan i fod yn llai na dilyniant o sero. Gadewch i ni ei ategu gyda nhw.
--]]
return part..zero_string:sub(1, end_index - #in_part)
end
end
end
end)
end
end
end
return out_part
end
Casgliad
Felly, roeddem yn gallu lawrlwytho a chydosod y ffeil hon ar gyfrifiadur personol. Ar ôl yr uno, tynnais y ffeil torrent o'r tabled. Gosodais gleient torrent ar fy nghyfrifiadur personol a gwirio'r ffeil ag ef.
Gellir gadael y rhan a lawrlwythwyd ddiwethaf ar y tabled ar y dosbarthiad, ond mae angen i chi alluogi ail-wirio'r rhannau cyn hyn a dad-diciwch y ffeil fel nad yw'n llwytho i lawr eto.