16GB boş yer olan planşet vasitəsilə 4GB torrent endirilir

16GB boş yer olan planşet vasitəsilə 4GB torrent endirilir

Vəzifə:

İnterneti olmayan bir PC var, ancaq faylı USB vasitəsilə köçürmək mümkündür. Bu faylı köçürmək üçün İnternetə sahib bir planşet var. Tələb olunan torrenti planşetinizə yükləyə bilərsiniz, lakin kifayət qədər boş yer yoxdur. Torrentdəki fayl bir və böyükdür.

Həll yolu:

Yükləmək üçün torrentə başladım. Boş yer demək olar ki, bitəndə mən yükləməni dayandırdım. Planşeti PC-yə qoşdum və faylı planşetdən PC-yə köçürdüm. Mən fasilə verdim və təəccübləndim ki, fayl yenidən yaradıldı və torrent heç bir şey olmamış kimi endirməyə davam etdi.

Torrent müştərisi alınan məlumatları yazdığı fayla seyrək bayraq qoyduğuna görə sistem bir anda 16GB rezerv etməyə çalışmır və 4GB-dan yuxarı fayla yazmağa çalışarkən xəta baş verməyəcək.

Dörd dəfə proseduru təkrarladıqdan sonra mən kompüterimdə eyni torrentin müxtəlif hissələrini ehtiva edən dörd fayl aldım. İndi yalnız onları bir yerə yığmaq qalır. Prosedur mahiyyətcə sadədir. Dörd fayldan birində verilmiş mövqedə varsa, sıfır baytı başqa bir dəyərlə əvəz etməlisiniz.

Mənə elə gəldi ki, internetdə belə sadə proqram olmalıdır. Heç kim belə problemlə qarşılaşmayıb? Amma başa düşdüm ki, onu hansı açar sözlərlə axtaracağımı belə bilmirəm. Buna görə də bu tapşırıq üçün tez bir zamanda Lua skripti yaratdım və indi onu optimallaşdırdım. Paylaşmaq istədiyim budur.

Torrentin hissə-hissə yüklənməsi

  1. ilk cihazda torrenti endirməyə başlayın
  2. ROM doldurulana qədər gözləyin
  3. yükləməni dayandırın
  4. faylı ikinci cihaza köçürün və fayl adına nömrə əlavə edin
  5. fayl tamamilə endirilənə qədər birinci nöqtəyə qayıdırıq

Parçaların bir faylda birləşdirilməsi

Son hissə alındıqdan sonra onları bir faylda toplamaq lazımdır.

Tapşırıq sadədir:

  1. Bütün hissələri bir anda oxumaq
  2. Əgər hansısa hissədə mövqe sıfır bayt deyilsə, onu çıxışa yazırıq, əks halda sıfır yazırıq.

Function merge_part bir sıra iplikləri qəbul edir streams_in ölçüsünün bir hissəsini oxuyur buffer_length və müxtəlif iplərdən hissələrin birləşməsinin nəticəsini qaytarır.

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 tapşırıq üçün uyğundur, çünki o, sıfırlarla dolu parçaları tapacaq və ona veriləni çatdıracaq.

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

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

string.gsub matçın tapıldığı mövqeni çatdırmır. Buna görə də mövqe üçün paralel axtarış aparırıq zero_string funksiyasından istifadə etməklə string.find. İlk sıfır baytı tapmaq kifayətdir.

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

--[[

İndi əgər varsa in_part üçün məlumatlar var out_part onları kopyalayın.

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

-dən kəsin in_part sıfırların ardıcıllığına uyğun olan hissə.

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

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

В part məlumatlar var.

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

part sıfır ardıcıllığından az olduğu ortaya çıxdı. Gəlin bunu onlarla tamamlayaq.

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

Nəticə

Beləliklə, biz bu faylı PC-yə yükləyə və yığa bildik. Birləşmədən sonra torrent faylını planşetdən çıxartdım. Kompüterimə torrent müştəri quraşdırdım və onunla faylı yoxladım.

Planşetdə sonuncu yüklənmiş hissə paylamada qala bilər, lakin siz bundan əvvəl hissələrin yenidən yoxlanılmasını aktivləşdirməlisiniz və faylın yenidən endirilməməsi üçün işarəni silməlisiniz.

İstifadə olunub:

  1. Flud torrent müştəri planşetdə.
  2. Torrent müştəri qBittorent kompüterdə.
  3. Lua skripti

Mənbə: www.habr.com

Добавить комментарий