16 ГБ бош мейкиндиги бар планшет аркылуу 4 ГБ торрент жүктөлүп алынууда

16 ГБ бош мейкиндиги бар планшет аркылуу 4 ГБ торрент жүктөлүп алынууда

Тапшырма:

Интернети жок компьютер бар, бирок файлды USB аркылуу өткөрүүгө болот. Бул файлды өткөрө турган Интернети бар планшет бар. Керектүү торрентти планшетиңизге жүктөп алсаңыз болот, бирок бош орун жетишсиз. Торренттеги файл бир жана чоң.

Чечимге жол:

Мен жүктөө үчүн торрентти баштадым. Бош орун дээрлик жок болгондо, мен жүктөөнү тындырдым. Мен планшетти компьютерге туташтырдым жана файлды планшеттен компьютерге жылдырдым. Мен тындым, мен таң калдым, файл кайра түзүлдү жана торрент эч нерсе болбогондой жүктөлө берди.

Торрент кардары алынган маалыматтарды жазып жаткан файлга сейрек желекти орноткондугуна байланыштуу, система бир эле учурда 16 ГБ резервге коюуга аракет кылбайт жана 4 ГБдан ашкан файлга жазуу аракетинде ката пайда болбойт.

Процедураны төрт жолу кайталагандан кийин, мен өз компьютеримде бир эле торренттин ар кандай бөлүктөрүн камтыган төрт файл алдым. Эми аларды бириктирүү гана калды. Процедура негизинен жөнөкөй. Төрт файлдын биринде берилген позицияда бар болсо, нөл байтты башка мааниге алмаштыруу керек.

Мага ушундай жөнөкөй программа интернетте болуш керек окшойт. Мындай көйгөйгө эч ким туш болгон жокпу? Бирок мен аны кандай ачкыч сөздөрдү издөөнү билбей турганымды түшүндүм. Ошондуктан, мен тез эле бул тапшырма үчүн Lua сценарийин түздүм жана азыр аны оптималдаштырдым. Бул мен бөлүшкүм келет.

Торрентти бөлүктөргө бөлүп жүктөп алуу

  1. биринчи түзмөктө торрент жүктөп баштоо
  2. ROM толтурулганга чейин күтө тур
  3. жүктөөнү тындыруу
  4. файлды экинчи түзмөккө өткөрүп, файлдын атына санды кошуңуз
  5. биз файл толугу менен жүктөлүп алынганга чейин биринчи пунктка кайтып келебиз

Бөлүктөрүн бир файлга бириктирүү

Акыркы бөлүгүн алгандан кийин, аларды бир бүтүн файлга чогултуу керек.

Тапшырма жөнөкөй:

  1. Бардык бөлүктөрүн бир эле учурда окуу
  2. Эгерде кандайдыр бир бөлүктө позиция нөл байт болбосо, анда биз аны чыгарууга жазабыз, антпесе нөлдү жазабыз

милдети 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. Биринчи нөл байтты табуу жетиштүү.

--]]
                    local start_index = out_part:find(" ", find_index, true)
                    find_index = start_index + #zero_string

--[[

Эми кирсе 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 кардарын орнотуп, аны менен файлды текшердим.

Планшеттеги акыркы жүктөлүп алынган бөлүк бөлүштүрүүдө калтырылышы мүмкүн, бирок ага чейин бөлүктөрдү кайра текшерүүнү иштетип, файл кайра жүктөлбөшү үчүн белгини алып салышыңыз керек.

Колдонулган:

  1. Планшеттеги Flud торрент кардары.
  2. Компьютерде Torrent кардары qBittorent.
  3. Луа скрипт

Source: www.habr.com

Комментарий кошуу