ProHoster > Blog > İdarə > 16GB boş yer olan planşet vasitəsilə 4GB torrent endirilir
16GB boş yer olan planşet vasitəsilə 4GB torrent endirilir
Vəzifə:
İnterneti olmayan bir PC var, ancaq faylı USB vasitəsilə köçürmək mümkündür. Bu faylı köçürmək üçün İnternetə sahib bir planşet var. Tələb olunan torrenti planşetinizə yükləyə bilərsiniz, lakin kifayət qədər boş yer yoxdur. Torrentdəki fayl bir və böyükdür.
Həll yolu:
Yükləmək üçün torrentə başladım. Boş yer demək olar ki, bitəndə mən yükləməni dayandırdım. Planşeti PC-yə qoşdum və faylı planşetdən PC-yə köçürdüm. Mən fasilə verdim və təəccübləndim ki, fayl yenidən yaradıldı və torrent heç bir şey olmamış kimi endirməyə davam etdi.
Torrent müştərisi alınan məlumatları yazdığı fayla seyrək bayraq qoyduğuna görə sistem bir anda 16GB rezerv etməyə çalışmır və 4GB-dan yuxarı fayla yazmağa çalışarkən xəta baş verməyəcək.
Dörd dəfə proseduru təkrarladıqdan sonra mən kompüterimdə eyni torrentin müxtəlif hissələrini ehtiva edən dörd fayl aldım. İndi yalnız onları bir yerə yığmaq qalır. Prosedur mahiyyətcə sadədir. Dörd fayldan birində verilmiş mövqedə varsa, sıfır baytı başqa bir dəyərlə əvəz etməlisiniz.
Mənə elə gəldi ki, internetdə belə sadə proqram olmalıdır. Heç kim belə problemlə qarşılaşmayıb? Amma başa düşdüm ki, onu hansı açar sözlərlə axtaracağımı belə bilmirəm. Buna görə də bu tapşırıq üçün tez bir zamanda Lua skripti yaratdım və indi onu optimallaşdırdım. Paylaşmaq istədiyim budur.
Torrentin hissə-hissə yüklənməsi
ilk cihazda torrenti endirməyə başlayın
ROM doldurulana qədər gözləyin
yükləməni dayandırın
faylı ikinci cihaza köçürün və fayl adına nömrə əlavə edin
fayl tamamilə endirilənə qədər birinci nöqtəyə qayıdırıq
Parçaların bir faylda birləşdirilməsi
Son hissə alındıqdan sonra onları bir faylda toplamaq lazımdır.
Tapşırıq sadədir:
Bütün hissələri bir anda oxumaq
Əgər hansısa hissədə mövqe sıfır bayt deyilsə, onu çıxışa yazırıq, əks halda sıfır yazırıq.
Function merge_part bir sıra iplikləri qəbul edir streams_in ölçüsünün bir hissəsini oxuyur buffer_length və müxtəlif iplərdən hissələrin birləşməsinin nəticəsini qaytarır.
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
--[[
Function string.gsub tapşırıq üçün uyğundur, çünki o, sıfırlarla dolu parçaları tapacaq və ona veriləni çatdıracaq.
--]]
out_part = out_part:gsub(" +", function(zero_string)
if #in_part < find_index then
return -- не на что менять
end
--[[
string.gsub matçın tapıldığı mövqeni çatdırmır. Buna görə də mövqe üçün paralel axtarış aparırıq zero_string funksiyasından istifadə etməklə string.find. İlk sıfır baytı tapmaq kifayətdir.
İndi əgər varsa in_part üçün məlumatlar var out_part onları kopyalayın.
--]]
if #in_part >= start_index then
local end_index = start_index + #zero_string - 1
--[[
-dən kəsin in_part sıfırların ardıcıllığına uyğun olan hissə.
--]]
local part = in_part:sub(start_index, end_index)
if (part:byte(1) ~= 0) or part:find("[^ ]") then
--[[
В part məlumatlar var.
--]]
if #part == #zero_string then
return part
else
--[[
part sıfır ardıcıllığından az olduğu ortaya çıxdı. Gəlin bunu onlarla tamamlayaq.
--]]
return part..zero_string:sub(1, end_index - #in_part)
end
end
end
end)
end
end
end
return out_part
end
Nəticə
Beləliklə, biz bu faylı PC-yə yükləyə və yığa bildik. Birləşmədən sonra torrent faylını planşetdən çıxartdım. Kompüterimə torrent müştəri quraşdırdım və onunla faylı yoxladım.
Planşetdə sonuncu yüklənmiş hissə paylamada qala bilər, lakin siz bundan əvvəl hissələrin yenidən yoxlanılmasını aktivləşdirməlisiniz və faylın yenidən endirilməməsi üçün işarəni silməlisiniz.