Как распокавать многотомный архив при помощи TAR в windows?
Приветстую. Делаю свой лаунчер для своих игр на C# и WinForm. Столкнулся с проблей хостинга для файлов самих игр. Из беасплатных решил выбрать только гугл диск, т.к. он оступен почти со всех стран, но у него ограничние на прямую загурзку не более 50 МБ, иначе вылазит предупреждение о большом файле и вместо фаула лаунчер качает страницу с этим предупреждением В итоге после продолжительного поиска альтернативного хостинга было решено остаться на гугл диске, но архивы с играми разбить на несоклько частей по 50 Мб. Теперь файлы скачиваются как надо, но для распаковки архивов с игрой я использую Tar, т.к. System.IO.Compression и System.IO.Compression.ZipFile на .Net 3.5 не работают и мне пришлось искать им аналог, так и выбрал для автоматической распаковки tar... Собстенно, проблема заключается в том, что как неискал информацию по распаковке, но так и не смог найти, как распаковать многотомный архив при помощи tar. Может кто в курсе, как это сделть?
Я предпинимал попытку №1: вручную разбить файлы по архивам и в коде распаковки указать все названия архивов и распаковывать по череди, но это занимает много времени и при обновлении игры придётся обновлять и лаунчер, т.к. в нём указаны все названия архивов, а в разных обновлениях то добавлю, то удалю и в итоге при сжатии получается каждый раз разное кол-во архивов...
Попытка №2: создать bat файл со списком всех архивов для распаковки и скачивать его вместе с игрой. Вполне неплохой вариант, но тоже неудобно каждый раз запаковывать файлы вручную по архивам и распаковывать архивы, вводя названия...
Ну или ещё как варинат, может кто знает какой бесплатный хостинг на замену гугл диску, с которого можно скачивать файлы напрямую без ограничения по весу (ну или до 1-2 гб)?
используй нормальное хранилище, например у Hetzner есть уже готовый Nextcloud
или S3
или FTP
или какой то webdav....
но логичнее просто по Https раздавать, с моей точки зрения
Эти "нормальные" хранилища платные и для меня слишком дорогие. Вообще разработка игр для не источник дохода, а увлечение, которым хочется делиться с другими, и делиться достаточно удобно. И при этом абсолютно нет желания платить... А вариант раздавать файлы со своего же ПК рассматривал, но тут очень много минусов, начиная с провайдера, который не даёт открывать порты (звонил, меня послали подальше, другие провайдеры в посёлок заходить не собираются), заканчивая веерными отключениями света, так что не вариант...
Drno, облако мейл ру недоступно из украины без ВПН...
А разве в меге есть скачивание по прямой ссылке? Я пользовался им пару лет назад, прямого не видал, а вот ожидание перед скачиванием достало хорошенько...
у tar нет поддержки многотомных архивов, идеологически если ее и реализуют то делят итоговый архив просто на части без какого либо формата (порядок в именах файлах)
гугли поддержку zip, она точно реализована для старых версий .net и в любом случае это оверкил, тебе нужен просто любой способ хранения файлов внутри других файлов с поддержкой томов (кстати тоже не обязательно, если файлы внутри архива никогда не превышают размер тома, то можно приблизительно собирать файлы в тома, чтобы влезали без их разделения).
Почему современные 'программисты' пасуют перед очень простыми задачами и при этом пилят достаточно сложные приложения. Эту задачу должны делать как курсовая в на первом курсе обучения - создать свой архиватор без поддержки сжатия, только имена файлов и несколько томов. Кода тут кот наплакал. А если допустить хранение списков файлов и порядка разделения на тома в отдельном файле (тебе же без разницы) то формат становится ну очень простым.
Предлагаю запилить такой формат как сериализованная метаинформация об архиве (количество и размер томов с именами файлов в нужном порядке + список файлов в архиве, для каждого файла crc+список кусков где он находится - это номер тома + смещение+размер куска, да это избыточно но просто). А файлы хранить просто линейно друг за другом, разделяя по окончанию места в томе.
Поддержка zip для тсарых версий есть, вот только всё завязалось вокруг слова "старых": почти все ссылки на скачивание библиотек для "старых" версий уже "старые" и нерабочие. Моя VS 2015 уже "старая" и найти для неё актуальные инструкции не удалось, всё только "старое"... Я бы обновил ВС до актуальной версии, да железо "старое" не тянет... Взять тот же DotNetZip, устанавливал его всеми доступными методами, заюзать так и не удалось. Вот реально, есть инструкции, ссылки на главную страниццу сайта микрософта, установка через nuget, который неизвестно откуда брать. Одни пишут, что он идёт в комплекте с .Net Framework 4.5.7, другие что он идёт вместе с VS, и кому верить? На сайьах с инструкцией по DotNetZip пишут, что нужно устанавливать командой в PowerShell, а по итогу при вооде команды получаю "+ CategoryInfo : ObjectNotFound: (dotnet:String) [], CommandNotFoundException"... В общем то, после этого мой взгляд и пал на Tar...
А вот насчёт своего формата я пас, для меня разработка игр - это в первую увлечение на пару часов в день, а изучать настолько серьёзные вещи я пока не намерен...
И насчёт соирать файлы в тома без разделения, то это я сейчас и использую, писал же. Вручную разделяю папку с игрой на архивы (к примеру, у одной игры 2 архива, у другой 9), к каждой игре пишу батник для распаковки, который скачивается вместе с игрой и после скачивания всех архивов этот батник сам запускается. Вот только у этого метода проблема: я не прописал проверку, скачался ли файл, по этому иногда последний файл может не докачаться и батник уже запустился, в итоге недокачанный файл начинает распаковываться и кидает в папку с игрой повреждённые файлы и игра не запускается. Писать все эти проверки мне просто лень, но, видимо, придётся... Хотя была мысть вместо такого скачивания скачивать только батник и использовать wget и tar для установки игр в папку с лаунчером, но это уже совсем запасной вариант...
З.Ы. Я однажды скачал архив zip с каким-то большим видео, архив весил около 180-220 МБ и в нём было видео весом около 1,2 Гб. С тех пор я так и не нашёл инструкций по такому качественному сжатию. Может ты слышал о способе такого сжатия? А то у меня одна из игр весит всего 150 МБ, в сжатом виде в одном архиве 85 Мб, а если разделить, то выходит 3, из них 2 по 45-49, третий около12. Это ж не дело...
Хотя ещё была мысль, может игры заливать на гугл диск не в архиве, а папкой? И эту папку сразу скачивать? Но над этим ещё думаю...
Очень интересно, залил целый архив в DropBox, прямую ссылку закинул в код скачивания, в итоге получил файл с нужным мне названием, но весом 0 байт. Ввёл эту же команду в wget, всё скачалось... В общем, теперь думаю перейти на Dropbox, скачивать целый архив через wget и распаковывать через tar...
у тебя очень сложная и корявая схема загрузки обновлений на клиенте, зачем все самому реализовывать?
у меня совет, подумай, возможно это решит все твои проблемы - используй torrent, первый же вопрос в гугл дал ответ, наверняка есть другие проекты, плюс можно приложить к своему проекту готовый бинарник на основе libtorrent (какой-нибудь deluge/rtorrent/...)
Смысл в том чтобы рассылать всем своим клиентам только торент файл и больше ничего. Один файл, все клиенты автоматом загружают изменения (скорее всего вручную придется отвечать за перехеширование файлов, чтобы при каждом обновлении все файлы не обновлялись) но главное, делать это они будут не с твоего сервера а с таких же клиентов. Да, тебе придется самому держать файлы на торенте, главное в том что делать это можно миллионом способов, поверь это очень удобно (при использовании нормальных клиентов или библиотеки libtorrent в клиент встроена технология webtorrent когда один из источников - это http ссылка)
Эта технология уже опробована и используется всеми, максимум в настройках установщика сделай опции по отключению сидирования и/или настройке лимитов (если использовать готовый клиент, можно об этом написать и дать путь до конфига)
rPman, идея хорошая, но вопросов очень много. Начну с самого банального, так как в раздаче торрентов не шарю: нужно ли открытие портов? Если да, то метод сразу не подходит, т.к. провайдер принудительно блокирует открытие (звонил, выяснял, в итоге меня послали). Если бы не блокировали, то я бы использовал OpenServer или анлоги и не мучался бы... Хотя время от времени ноут приходится выключать, ну или же ставить на перезагрузку, так что в эти моменты пользователи не смогут скачивать файлы. А вообще, для данной задачи, думаю, вполне подойдёт Raspberry Pi 2 или 3 и карта памяти гигов на 32-64, но опять же всё упирается в провайдера и, к сожалению, у нас в посёлке провайдер только один...
Для начала выброси из головы желание хоститься дома, тем более если у тебя на столько отсталый провайдер что блокирует входящие.
Выбирай любой виртуальный хостинг с ценами от 5$ в месяц (я перебирал несколько лет сверхдешевые vps-ки от многоуровневых реселеров - lowendstock.com там можно и за 8$ в год найти, но более менее нормальная скорость работы от 3$-5$ начинается, и хостись там, в т.ч. торент запускай)
Почему для ситуации с торрент будет достаточно слабой машины и медленного интернета? потому что сама идеология раздачи p2p максимально комфортно подходит для работы с большим количеством клиентов, которые одновременно пытаются что то скачать, сервер при этом можно вообще настроить на ограничение раздач, как только появятся личеры, они автоматом становятся и сидерами, а значит с сервера мало кто уже будет скачивать.
Забыл добавить - нужно будет либо использовать чужой трекер либо (рекомендуется) настроить свой, и в своем клиенте разрешить dht.
rPman, насчёт виртауальных хостингов думал, но мои ирыы пока ненастолько популярны, чтобы я мог себе позволить пользоваться платными сервисами. Так что пока этот вариант отпадает, буду использовать как есть: в коде запускаю wget и он качает архив, а потом unzip (не tar) просто паспаковывает архив в папку с лаунчером и всё. Кстати,я пока не искал, т.к. пока это не столь важно, но может знаешь, как прикрутить прогресс бар к прогремму в запускаемом приложении? А то в лаунчере есть прогресс бар, но он пока не задействован...