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

қорытынды

Осылайша, біз бұл файлды компьютерге жүктеп алып, жинай алдық. Біріктірілгеннен кейін мен торрент файлын планшеттен шығарып алдым. Мен компьютеріме торрент клиентін орнатып, онымен файлды тексердім.

Планшеттегі соңғы жүктелген бөлікті таратуда қалдыруға болады, бірақ оған дейін бөліктерді қайта тексеруді қосып, файлды қайта жүктеп алмас үшін құсбелгіні алып тастау керек.

Қолданылған:

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

Ақпарат көзі: www.habr.com

пікір қалдыру