ProHoster > Օրագիր > Վարչակազմը > Ներբեռնում է 16 ԳԲ տորրենտ 4 ԳԲ ազատ տարածություն ունեցող պլանշետի միջոցով
Ներբեռնում է 16 ԳԲ տորրենտ 4 ԳԲ ազատ տարածություն ունեցող պլանշետի միջոցով
Առաջադրանք.
Առանց ինտերնետի համակարգիչ կա, բայց ֆայլը հնարավոր է փոխանցել USB-ի միջոցով: Ինտերնետով պլանշետ կա, որտեղից կարելի է փոխանցել այս ֆայլը։ Դուք կարող եք ներբեռնել անհրաժեշտ torrent-ը ձեր պլանշետում, սակայն բավարար ազատ տարածք չկա: Ֆայլը torrent-ում մեկն է և մեծ:
Լուծման ուղին.
Ես սկսեցի torrent-ը ներբեռնելու համար: Երբ ազատ տարածքը գրեթե չկար, ես դադարեցրի ներբեռնումը: Ես պլանշետը միացրի համակարգչին և ֆայլը պլանշետից տեղափոխեցի համակարգիչ: Ես դադար տվեցի, և ի զարմանս ինձ, ֆայլը նորից ստեղծվեց, և torrent-ը շարունակեց ներբեռնումը, կարծես ոչինչ չէր եղել:
Շնորհիվ այն բանի, որ torrent հաճախորդը նոսր դրոշակ է սահմանում այն ֆայլի վրա, որում գրում է ստացված տվյալները, համակարգը չի փորձում միանգամից 16 ԳԲ վերապահել և սխալ չի առաջանա 4 ԳԲ-ից ավելի ֆայլում գրելիս:
Ընթացակարգը չորս անգամ կրկնելուց հետո ես իմ համակարգչում ստացա չորս ֆայլ, որոնք պարունակում էին նույն torrent-ի տարբեր մասեր: Այժմ մնում է միայն դրանք հավաքել։ Գործընթացը ըստ էության պարզ է. Դուք պետք է փոխարինեք զրոյական բայթը մեկ այլ արժեքով, եթե այն առկա է չորս ֆայլերից մեկում տվյալ դիրքում:
Ինձ թվում էր, որ նման պարզ ծրագիր պետք է լինի ինտերնետում։ Երբևէ ոչ ոք նման խնդրի չի բախվել։ Բայց ես հասկացա, որ ես նույնիսկ չգիտեմ, թե ինչ հիմնաբառեր որոնել այն: Հետևաբար, ես արագ ստեղծեցի Lua սցենար այս առաջադրանքի համար և այժմ այն օպտիմալացրել եմ: Սա այն է, ինչ ես ուզում եմ կիսվել:
Ներբեռնում է torrent-ը մաս-մաս
սկսեք ներբեռնել հեղեղը առաջին սարքից
սպասեք, մինչև ROM-ը լցվի
դադարեցնել ներբեռնումը
փոխանցեք ֆայլը երկրորդ սարքին և ֆայլի անվան մեջ համար ավելացրեք
մենք վերադառնում ենք առաջին կետին, մինչև ֆայլը ամբողջությամբ ներբեռնվի
Մասերի միավորում մեկ ֆայլի մեջ
Վերջին մասը ստանալուց հետո անհրաժեշտ է դրանք հավաքել մեկ ամբողջ ֆայլում:
Առաջադրանքը պարզ է.
Բոլոր մասերը միանգամից կարդալը
Եթե ինչ-որ մասում դիրքը զրո բայթ չէ, ապա այն գրում ենք ելքի վրա, հակառակ դեպքում՝ զրո։
Ֆունկցիա merge_part ընդունում է թելերի զանգված streams_in որոնցից կարդում է չափի մի մասը buffer_length և վերադարձնում է տարբեր թելերից մասերի միաձուլման արդյունքը:
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
--[[
Ֆունկցիա string.gsub հարմար է առաջադրանքի համար, քանի որ այն կգտնի զրոներով լցված կտորներ և կմատուցի իրեն տրվածը:
--]]
out_part = out_part:gsub(" +", function(zero_string)
if #in_part < find_index then
return -- не на что менять
end
--[[
string.gsub չի փոխանցում այն դիրքը, որում գտնվել է խաղը: Հետեւաբար, զուգահեռ որոնում ենք անում պաշտոնի համար zero_string օգտագործելով գործառույթը string.find. Բավական է գտնել առաջին զրոյական բայթը։
Հիմա եթե ներս in_part համար կան տվյալներ out_part պատճենեք դրանք:
--]]
if #in_part >= start_index then
local end_index = start_index + #zero_string - 1
--[[
Կտրել է in_part մաս, որը համապատասխանում է զրոների հաջորդականությանը։
--]]
local part = in_part:sub(start_index, end_index)
if (part:byte(1) ~= 0) or part:find("[^ ]") then
--[[
В part կան տվյալներ.
--]]
if #part == #zero_string then
return part
else
--[[
part պարզվեց, որ փոքր է, քան զրոների հաջորդականությունը: Լրացնենք նրանցով։
--]]
return part..zero_string:sub(1, end_index - #in_part)
end
end
end
end)
end
end
end
return out_part
end
Ամփոփում
Այսպիսով, մենք կարողացանք ներբեռնել և հավաքել այս ֆայլը համակարգչի վրա: Միաձուլումից հետո ես հանեցի torrent ֆայլը պլանշետից: Ես իմ համակարգչի վրա տեղադրեցի torrent հաճախորդ և ստուգեցի ֆայլը դրանով:
Պլանշետի վերջին ներբեռնված մասը կարելի է թողնել բաշխման վրա, բայց դուք պետք է ակտիվացնեք մասերի վերստուգումը մինչ այդ և հանեք ֆայլի նշումը, որպեսզի այն նորից չներբեռնվի: