ProHoster > Blog > Ma'muriyat > 16 GB bo'sh joyga ega planshet orqali 4 GB torrent yuklab olish
16 GB bo'sh joyga ega planshet orqali 4 GB torrent yuklab olish
Vazifa:
Internetsiz kompyuter mavjud, lekin faylni USB orqali uzatish mumkin. Ushbu faylni o'tkazish mumkin bo'lgan Internetga ega planshet mavjud. Planshetingizga kerakli torrentni yuklab olishingiz mumkin, ammo bo'sh joy yetarli emas. Torrentdagi fayl bitta va katta.
Yechimga yo'l:
Yuklab olish uchun torrentni boshladim. Bo'sh joy deyarli tugagach, men yuklab olishni to'xtatdim. Men planshetni shaxsiy kompyuterga uladim va faylni planshetdan shaxsiy kompyuterga o'tkazdim. Men to'xtab qoldim va hayron bo'ldimki, fayl yana yaratildi va torrent hech narsa bo'lmagandek yuklab olishni davom ettirdi.
Torrent mijozi qabul qilingan ma'lumotlarni yozadigan faylga siyrak bayroqni o'rnatganligi sababli, tizim bir vaqtning o'zida 16 Gb ni zaxiralashga urinmaydi va 4 Gb dan ortiq faylga yozishga urinayotganda xatolik yuzaga kelmaydi.
Jarayonni to'rt marta takrorlaganimdan so'ng, men shaxsiy kompyuterimda bitta torrentning turli qismlarini o'z ichiga olgan to'rtta faylni oldim. Endi faqat ularni birlashtirish qoladi. Jarayon asosan oddiy. Nol baytni boshqa qiymat bilan almashtirishingiz kerak, agar u to'rtta fayldan birida ma'lum bir pozitsiyada mavjud bo'lsa.
Menga shunday oddiy dastur Internetda bo'lishi kerakdek tuyuldi. Hech kim bunday muammoga duch kelmaganmi? Lekin men uni qanday kalit so'zlarni qidirishni ham bilmasligimni angladim. Shuning uchun men tezda ushbu vazifa uchun Lua skriptini yaratdim va endi uni optimallashtirdim. Bu men baham ko'rmoqchi bo'lgan narsadir.
Torrent qismlarga bo'lib yuklab olish
birinchi qurilmada torrentni yuklab olishni boshlang
ROM to'lguncha kuting
yuklab olishni to'xtatib turing
faylni ikkinchi qurilmaga o'tkazing va fayl nomiga raqam qo'shing
fayl to'liq yuklab olinmaguncha birinchi nuqtaga qaytamiz
Qismlarni bitta faylga birlashtirish
Oxirgi qism olingandan so'ng, ularni bitta faylga to'plash kerak.
Vazifa oddiy:
Bir vaqtning o'zida barcha qismlarni o'qish
Agar biror qismda pozitsiya nol bayt bo'lmasa, biz uni chiqishga yozamiz, aks holda biz nol yozamiz.
vazifa merge_part iplar qatorini qabul qiladi streams_in qaysi o'lchamning bir qismini o'qiydi buffer_length va turli iplardagi qismlarni birlashtirish natijasini qaytaradi.
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
--[[
vazifa string.gsub vazifa uchun mos keladi, chunki u nol bilan to'ldirilgan bo'laklarni topadi va unga berilgan narsalarni etkazib beradi.
--]]
out_part = out_part:gsub(" +", function(zero_string)
if #in_part < find_index then
return -- не на что менять
end
--[[
string.gsub o'yin topilgan pozitsiyani bildirmaydi. Shuning uchun biz pozitsiyani parallel ravishda qidiramiz zero_string funksiyasidan foydalanish string.find. Birinchi nol baytni topish kifoya.
Endi kirsangiz in_part uchun ma'lumotlar mavjud out_part ularni nusxalash.
--]]
if #in_part >= start_index then
local end_index = start_index + #zero_string - 1
--[[
dan kesib oling in_part nollar ketma-ketligiga mos keladigan qism.
--]]
local part = in_part:sub(start_index, end_index)
if (part:byte(1) ~= 0) or part:find("[^ ]") then
--[[
В part ma’lumotlar mavjud.
--]]
if #part == #zero_string then
return part
else
--[[
part nollar ketma-ketligidan kichik bo'lib chiqdi. Keling, buni ular bilan to'ldiramiz.
--]]
return part..zero_string:sub(1, end_index - #in_part)
end
end
end
end)
end
end
end
return out_part
end
xulosa
Shunday qilib, biz ushbu faylni kompyuterga yuklab olib, yig'ishga muvaffaq bo'ldik. Birlashgandan so'ng, men torrent faylini planshetdan chiqarib oldim. Men kompyuterimga torrent mijozini o'rnatdim va u bilan faylni tekshirdim.
Planshetdagi so'nggi yuklab olingan qism tarqatishda qoldirilishi mumkin, ammo undan oldin qismlarni qayta tekshirishni yoqishingiz va fayl qayta yuklanmasligi uchun belgini olib tashlashingiz kerak.