Tniżżil ta' torrent ta' 16GB permezz ta' tablet b'4GB ta' spazju ħieles

Tniżżil ta' torrent ta' 16GB permezz ta' tablet b'4GB ta' spazju ħieles

Kompitu:

Hemm PC mingħajr l-Internet, iżda huwa possibbli li tittrasferixxi l-fajl permezz tal-USB. Hemm pillola bl-Internet li minnha jista 'jiġi trasferit dan il-fajl. Tista 'tniżżel it-torrent meħtieġ fuq il-pillola tiegħek, iżda m'hemmx biżżejjed spazju ħieles. Il-fajl fit-torrent huwa wieħed u kbir.

Mogħdija għas-soluzzjoni:

Bdejt it-torrent biex tniżżel. Meta l-ispazju ħieles kien kważi marret, waqqaft it-tniżżil. I konnessi l-tablet mal-PC u mċaqalqa l-fajl mill-tablet għall-PC. Waqaft ftit u b'sorpriża tiegħi reġa' nħoloq il-fajl u t-torrent kompla jniżżel bħallikieku ma ġara xejn.

Minħabba l-fatt li l-klijent tat-torrent jistabbilixxi l-bandiera skarsa għall-fajl li fih jikteb id-dejta riċevuta, is-sistema ma tippruvax tirriserva 16GB f'daqqa u żball mhux se jseħħ meta tipprova tikteb f'fajl lil hinn minn 4GB.

Wara li rrepeti l-proċedura erba 'darbiet, irċevejt erba' fajls fuq il-PC tiegħi li fihom partijiet differenti tal-istess torrent. Issa li jibqa’ biss li ngħaqqduhom flimkien. Il-proċedura hija essenzjalment sempliċi. Għandek bżonn tissostitwixxi l-bytes żero b'valur ieħor jekk teżisti f'pożizzjoni partikolari f'wieħed mill-erba' fajls.

Deherli li programm sempliċi bħal dan għandu jkun fuq l-Internet. Ħadd qatt iltaqa’ ma’ problema bħal din? Imma rrealizzajt li lanqas biss naf liema keywords infittex għaliha. Għalhekk, ħloqt malajr script Lua għal dan il-kompitu u issa ottimizzajtu. Dan huwa dak li rrid naqsam.

Niżżel it-torrent f'partijiet

  1. ibda tniżżel it-torrent fuq l-ewwel apparat
  2. stenna sakemm timtela r-ROM
  3. waqqaf it-tniżżil
  4. ittrasferixxi l-fajl għat-tieni apparat u żid numru mal-isem tal-fajl
  5. nerġgħu lura għall-ewwel punt sakemm il-fajl jitniżżel kompletament

Jingħaqdu partijiet f'fajl wieħed

Wara li tkun waslet l-aħħar parti, huwa meħtieġ li jinġabru f'fajl wieħed sħiħ.

Il-kompitu huwa sempliċi:

  1. Qari l-partijiet kollha f'daqqa
  2. Jekk f'xi parti l-pożizzjoni mhix byte żero, allura niktbuha fl-output, inkella niktbu żero

Funzjoni merge_part jaċċetta firxa ta 'ħjut streams_in li minnhom jaqra porzjon tad-daqs buffer_length u jirritorna r-riżultat ta 'partijiet li jingħaqdu minn ħjut differenti.

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
--[[

Funzjoni string.gsub huwa adattat għall-kompitu għax se jsib biċċiet mimlija żerijiet u jagħti dak li jingħatalu.

--]]
                out_part = out_part:gsub(" +", function(zero_string)

                    if #in_part < find_index then
                        return -- не на что менять
                    end
--[[

string.gsub ma jwassalx il-pożizzjoni li fiha nstabet it-taqbila. Għalhekk, nagħmlu tfittxija parallela għall-pożizzjoni zero_string bl-użu tal-funzjoni string.find. Huwa biżżejjed li ssib l-ewwel byte żero.

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

--[[

Issa jekk fi in_part hemm data għal out_part kopjahom.

--]]
                    if #in_part >= start_index then
                        local end_index = start_index + #zero_string - 1
--[[

Aqta minn in_part parti li tikkorrispondi għas-sekwenza ta 'żeri.

--]]
                        local part = in_part:sub(start_index, end_index)

                        if (part:byte(1) ~= 0) or part:find("[^ ]") then
--[[

В part hemm data.

--]]
                            if #part == #zero_string then
                                return part
                            else
--[[

part irriżulta li kien inqas minn sekwenza ta’ żerijiet. Ejja nissupplimentawha magħhom.

--]]
                                return part..zero_string:sub(1, end_index - #in_part)
                            end
                        end
                    end
                end)
            end
        end
    end
    return out_part
end

Konklużjoni

Għalhekk, stajna tniżżel u niġbru dan il-fajl fuq PC. Wara l-għaqda, ħriġt il-fajl tat-torrent mit-tablet. Installajt klijent tat-torrent fuq il-PC tiegħi u ċċekkja l-fajl miegħu.

L-aħħar parti mniżżla fuq il-pillola tista 'titħalla fuq id-distribuzzjoni, iżda trid tippermetti l-iċċekkjar mill-ġdid tal-partijiet qabel dan u neħħi l-kontroll tal-fajl sabiex ma jerġax tniżżel.

Użat:

  1. Flud torrent client fuq tablet.
  2. Torrent client qBittorent fuq il-PC.
  3. Lua script

Sors: www.habr.com

Żid kumment