Зеркашии ҷӯйе 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. Скрипти Луа

Манбаъ: will.com

Илова Эзоҳ