16GB නිදහස් ඉඩක් සහිත ටැබ්ලටයක් හරහා 4GB ටොරන්ට් බාගත කිරීම

16GB නිදහස් ඉඩක් සහිත ටැබ්ලටයක් හරහා 4GB ටොරන්ට් බාගත කිරීම

අභියෝගය:

අන්තර්ජාලය නොමැතිව පරිගණකයක් ඇත, නමුත් USB හරහා ගොනුව මාරු කළ හැකිය. මෙම ගොනුව මාරු කළ හැකි අන්තර්ජාලය සමඟ ටැබ්ලටයක් ඇත. ඔබට ඔබගේ ටැබ්ලටයේ අවශ්‍ය ටොරන්ට් බාගත කළ හැක, නමුත් ප්‍රමාණවත් නිදහස් ඉඩක් නොමැත. ටොරන්ට් එකේ ෆයිල් එකයි ලොකුයි.

විසඳුම සඳහා මාර්ගය:

මම බාගන්න ටොරන්ට් එක පටන් ගත්තා. නිදහස් ඉඩ බොහෝ දුරට නැති වූ විට, මම බාගත කිරීම විරාම කළෙමි. මම ටැබ්ලටය පරිගණකයට සම්බන්ධ කර ගොනුව ටැබ්ලටයෙන් පරිගණකයට ගෙන ගියෙමි. මම නැවතුනෙමි, මා පුදුමයට පත් කරමින් ගොනුව නැවත නිර්මාණය වී කිසිවක් සිදු නොවූවාක් මෙන් ටොරන්ට් එක දිගටම බාගත විය.

ටොරන්ට් ක්ලයන්ට් විසින් ලැබුණු දත්ත ලියන ගොනුවට ස්පාර්ස් ධජය සකසන නිසා, පද්ධතිය එකවර 16GB වෙන් කිරීමට උත්සාහ නොකරන අතර 4GB ට වඩා වැඩි ගොනුවකට ලිවීමට උත්සාහ කිරීමේදී දෝෂයක් සිදු නොවේ.

ක්‍රියා පටිපාටිය හතර වතාවක් පුනරුච්චාරණය කිරීමෙන් පසු, මගේ පරිගණකයට එකම ටොරන්ට් එකේ විවිධ කොටස් අඩංගු ලිපිගොනු හතරක් ලැබුණි. දැන් ඉතිරිව ඇත්තේ ඒවා එකට තැබීමයි. ක්රියා පටිපාටිය අත්යවශ්යයෙන්ම සරලයි. ශුන්‍ය බයිට් ගොනු හතරෙන් එකක දී ඇති ස්ථානයක තිබේ නම් එය වෙනත් අගයකින් ප්‍රතිස්ථාපනය කළ යුතුය.

එවැනි සරල වැඩසටහනක් අන්තර්ජාලයේ තිබිය යුතු බව මට පෙනී ගියේය. එවැනි ගැටලුවකට කිසිවකු මුහුණ දී නැද්ද? නමුත් එය සෙවිය යුතු මූල පද මොනවාදැයි මා නොදන්නා බව මට වැටහුණි. ඒ නිසා මම ඉක්මනින්ම මේ වැඩේට Lua ස්ක්‍රිප්ට් එකක් හදලා දැන් ඒක Optimize කරලා තියෙනවා. මට බෙදා ගැනීමට අවශ්‍ය වන්නේ මෙයයි.

කොටස් වශයෙන් ටොරන්ට් බාගත කිරීම

  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. ටැබ්ලටයක් මත ෆ්ලඩ් ටොරන්ට් සේවාදායකයා.
  2. පරිගණකයේ ටොරන්ට් සේවාදායකයා qBittorent.
  3. Lua පිටපත

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න