In 16GB torrent downloade fia in tablet mei 4GB frije romte

In 16GB torrent downloade fia in tablet mei 4GB frije romte

In taak:

D'r is in PC sûnder ynternet, mar it is mooglik om it bestân fia USB oer te setten. D'r is in tablet mei it ynternet wêrfan dit bestân oerdroegen wurde kin. Jo kinne de fereaske torrent downloade op jo tablet, mar d'r is net genôch frije romte. De triem yn 'e torrent is ien en grut.

Paad nei oplossing:

Ik begon de torrent om te downloaden. Doe't de frije romte hast fuort wie, haw ik de download ûnderbrutsen. Ik ferbûn de tablet oan 'e PC en ferpleatst de triem fan' e tablet nei de PC. Ik pauze en ta myn ferrassing waard it bestân wer oanmakke en de torrent gie troch mei it downloaden as wie neat bard.

Fanwegen it feit dat de torrent-kliïnt de sparse flagge ynstelt yn it bestân wêryn it de ûntfongen gegevens skriuwt, besiket it systeem net tagelyk 16GB te reservearjen en sil gjin flater foarkomme as jo besykje te skriuwen nei in bestân boppe 4GB.

Nei it werheljen fan de proseduere fjouwer kear, krige ik fjouwer bestannen op myn PC mei ferskate dielen fan deselde torrent. No bliuwt it allinich om se byinoar te setten. De proseduere is yn wêzen ienfâldich. Jo moatte ferfange de nul bytes mei in oare wearde as it bestiet op in opjûne posysje yn ien fan de fjouwer triemmen.

It like my ta dat sa'n ienfâldich programma op it ynternet moat. Hat nimmen ea sa'n probleem tsjinkommen? Mar ik realisearre dat ik net iens wit hokker kaaiwurden ik nei sykje. Dêrom haw ik fluch in Lua-skript makke foar dizze taak en no haw ik it optimalisearre. Dit is wat ik diele wol.

Download de torrent yn dielen

  1. begjinne mei it downloaden fan de torrent op it earste apparaat
  2. wachtsje oant de ROM is fol
  3. pauze de ynlaad
  4. oerdrage de triem nei it twadde apparaat en foegje in nûmer ta oan de triemnamme
  5. wy geane werom nei it earste punt oant it bestân folslein ynladen is

It gearfoegjen fan dielen yn ien bestân

Nei't it lêste diel is ûntfongen, is it nedich om se yn ien hiele bestân te sammeljen.

De taak is ienfâldich:

  1. Alle dielen tagelyk lêze
  2. As yn in part de posysje gjin nul byte is, dan skriuwe wy it nei de útfier, oars skriuwe wy nul

function merge_part akseptearret in array fan triedden streams_in wêrfan lêst in diel fan grutte buffer_length en jout it resultaat fan it gearfoegjen fan dielen út ferskate triedden.

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 is geskikt foar de taak omdat it sil fine stikken fol mei nullen en leverje wat wurdt jûn oan it.

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

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

string.gsub net oerbringe de posysje dêr't de wedstriid waard fûn. Dêrom sykje wy parallel nei de posysje zero_string mei help fan de funksje string.find. It is genôch om de earste nul byte te finen.

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

--[[

No as yn in_part der is gegevens foar out_part kopiearje harren.

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

Snije út in_part diel oerienkomt mei de folchoarder fan nullen.

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

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

В part der is gegevens.

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

part die bliken minder te wêzen as in sekwinsje fan nullen. Litte wy it mei har oanfolje.

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

konklúzje

Sa koene wy ​​dit bestân downloade en gearstalle op in PC. Nei de fúzje helle ik it torrentbestân út 'e tablet. Ik ynstallearre in torrent client op myn PC en kontrolearre it bestân mei it.

It lêste ynladen diel op 'e tablet kin oerlitten wurde op' e distribúsje, mar jo moatte it opnij kontrolearjen fan 'e dielen foardat dit ynskeakelje en it bestân wiskje, sadat it net opnij downloade.

Brûkt:

  1. Flud torrent client op in tablet.
  2. Torrent client qBittorent op PC.
  3. Lua skript

Boarne: www.habr.com

Add a comment