ProHoster > Блог > басқарма > 16 ГБ бос орны бар планшет арқылы 4 ГБ торрентті жүктеп алу
16 ГБ бос орны бар планшет арқылы 4 ГБ торрентті жүктеп алу
Сынақ:
Интернетсіз компьютер бар, бірақ файлды USB арқылы тасымалдауға болады. Бұл файлды тасымалдауға болатын Интернеті бар планшет бар. Қажетті торрентті планшетке жүктеп алуға болады, бірақ бос орын жеткіліксіз. Торренттегі файл бір және үлкен.
Шешім жолы:
Мен жүктеп алу үшін торрентті бастадым. Бос орын таусылғанда, жүктеп алуды тоқтаттым. Мен планшетті компьютерге қосып, файлды планшеттен компьютерге көшірдім. Мен тоқтадым және таң қалдым, файл қайтадан жасалды және торрент ештеңе болмағандай жүктеп алуды жалғастырды.
Торрент клиенті алынған деректерді жазатын файлға сирек жалаушаны орнатқандықтан, жүйе бірден 16 ГБ резервтеуге тырыспайды және 4 ГБ-тан асатын файлға жазу әрекеті кезінде қате пайда болмайды.
Процедураны төрт рет қайталаған соң, менің компьютерімде бір торренттің әртүрлі бөліктері бар төрт файлды алдым. Енді оларды біріктіру ғана қалды. Процедура негізінен қарапайым. Төрт файлдың бірінде берілген орында бар болса, нөлдік байтты басқа мәнмен ауыстыру керек.
Маған осындай қарапайым бағдарлама интернетте болуы керек сияқты көрінді. Мұндай проблемаға ешкім тап болған жоқ па? Бірақ мен оны қандай кілт сөздермен іздеу керектігін де білмеймін деп түсіндім. Сондықтан мен бұл тапсырма үшін тез арада Lua сценарийін жасадым және қазір оны оңтайландырдым. Менің бөліскім келетіні осы.
Торрентті бөліктерге бөліп жүктеп алу
бірінші құрылғыда торрентті жүктеп алуды бастаңыз
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
қорытынды
Осылайша, біз бұл файлды компьютерге жүктеп алып, жинай алдық. Біріктірілгеннен кейін мен торрент файлын планшеттен шығарып алдым. Мен компьютеріме торрент клиентін орнатып, онымен файлды тексердім.
Планшеттегі соңғы жүктелген бөлікті таратуда қалдыруға болады, бірақ оған дейін бөліктерді қайта тексеруді қосып, файлды қайта жүктеп алмас үшін құсбелгіні алып тастау керек.