16 Gt:n torrentin lataaminen tabletilla, jossa on 4 Gt vapaata tilaa

16 Gt:n torrentin lataaminen tabletilla, jossa on 4 Gt vapaata tilaa

tavoite:

On PC ilman Internetiä, mutta on mahdollista siirtää tiedosto USB:n kautta. Internetissä on tabletti, josta tämä tiedosto voidaan siirtää. Voit ladata vaaditun torrentin tablet-laitteellesi, mutta vapaata tilaa ei ole tarpeeksi. Torrentissa oleva tiedosto on yksi ja suuri.

Polku ratkaisuun:

Aloitin torrentin lataamisen. Kun vapaa tila oli melkein loppunut, keskeytin latauksen. Yhdistin tabletin tietokoneeseen ja siirsin tiedoston tabletista tietokoneeseen. Pysähdyin ja yllätyksekseni tiedosto luotiin uudelleen ja torrent jatkoi lataamista kuin mitään ei olisi tapahtunut.

Koska torrent-asiakas asettaa harvan lipun tiedostolle, johon se kirjoittaa vastaanotetut tiedot, järjestelmä ei yritä varata 16 Gt kerralla eikä virhettä tapahdu yritettäessä kirjoittaa yli 4 Gt:n tiedostoon.

Toistan toimenpiteen neljä kertaa, sain tietokoneelleni neljä tiedostoa, jotka sisälsivät saman torrentin eri osia. Nyt ei jää muuta kuin koota ne yhteen. Menettely on pohjimmiltaan yksinkertainen. Sinun on korvattava nolla tavu toisella arvolla, jos se on tietyssä paikassa yhdessä neljästä tiedostosta.

Minusta näytti, että tällaisen yksinkertaisen ohjelman pitäisi olla Internetissä. Eikö kukaan ole törmännyt tällaiseen ongelmaan? Mutta tajusin, etten edes tiedä, millä avainsanoilla etsiä sitä. Siksi loin nopeasti Lua-skriptin tätä tehtävää varten ja nyt olen optimoinut sen. Tämän haluan jakaa.

Torrentin lataus osissa

  1. aloita torrentin lataaminen ensimmäiselle laitteelle
  2. odota, kunnes ROM on täynnä
  3. keskeytä lataus
  4. siirrä tiedosto toiseen laitteeseen ja lisää numero tiedoston nimeen
  5. palaamme ensimmäiseen kohtaan, kunnes tiedosto on ladattu kokonaan

Osien yhdistäminen yhdeksi tiedostoksi

Kun viimeinen osa on vastaanotettu, on tarpeen koota ne yhdeksi kokonaiseksi tiedostoksi.

Tehtävä on yksinkertainen:

  1. Kaikkien osien lukeminen kerralla
  2. Jos jossain osassa paikka ei ole nolla tavu, niin kirjoitetaan se ulostuloon, muuten kirjoitetaan nolla

Toiminto merge_part hyväksyy joukon säikeitä streams_in josta lukee osan koosta buffer_length ja palauttaa eri säikeiden osien yhdistämisen tuloksen.

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

Toiminto string.gsub sopii tehtävään, koska se löytää nollalla täytetyt palat ja toimittaa sen, mitä sille on annettu.

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

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

string.gsub ei kerro paikkaa, jossa ottelu löydettiin. Siksi teemme paikan rinnakkaisen haun zero_string funktiota käyttämällä string.find. Riittää, kun löytää ensimmäinen nollatavu.

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

--[[

Jos nyt sisään in_part varten on dataa out_part kopioi ne.

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

Leikattu in_part osa, joka vastaa nollien sarjaa.

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

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

В part dataa on.

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

part osoittautui pienemmäksi kuin nollien sarja. Täydennetään sitä niillä.

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

Johtopäätös

Näin ollen pystyimme lataamaan ja kokoamaan tämän tiedoston PC:lle. Sulautumisen jälkeen vedin torrent-tiedoston ulos tabletista. Asensin torrent-asiakkaan tietokoneelleni ja tarkistin tiedoston sillä.

Tabletin viimeksi ladattu osa voidaan jättää jakeluun, mutta sinun on otettava osien uudelleentarkistus käyttöön ennen tätä ja poistettava tiedoston valinta, jotta sitä ei ladata uudelleen.

Käytetty:

  1. Flud torrent-asiakasohjelma tabletilla.
  2. Torrent-asiakas qBittorent PC:llä.
  3. Lua käsikirjoitus

Lähde: will.com

Lisää kommentti