<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=421102&amp;view=findpost&amp;p=3843693</guid>
        <pubDate>Sat, 16 Jan 2021 16:08:25 +0000</pubDate>
        <title>Создать архив из файлов, только функции СИ</title>
        <link>https://forum.sources.ru/index.php?showtopic=421102&amp;view=findpost&amp;p=3843693</link>
        <description><![CDATA[FasterHarder: а ведь у меня получилось&#33;&#33; хо&#33;<br>правда я упростил донельзя) только каскадная архивация и распаковка + получение списка упакованных файлов<br>в прожке под 300 строк кода и около 12 функций<br><br>самый сложный момент был при распаковке учесть смещения всякие разные относительно начала файла и пр., чтобы получить доступ к байтам тела нужного файла<br>еще думал, что всякие графические форматы будут искажены после распаковки - не, все прошло круто&#33;]]></description>
        <author>FasterHarder</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=421102&amp;view=findpost&amp;p=3843681</guid>
        <pubDate>Sat, 16 Jan 2021 10:22:48 +0000</pubDate>
        <title>Создать архив из файлов, только функции СИ</title>
        <link>https://forum.sources.ru/index.php?showtopic=421102&amp;view=findpost&amp;p=3843681</link>
        <description><![CDATA[FasterHarder: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=421102&view=findpost&p=3843674'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>ЫукпШ &#064; <time class="tag-quote__quoted-time" datetime="2021-01-15T22:31:54+00:00">15.01.21, 22:31</time></span><div class='quote '>или лишнего придумал</div></div><br>
не то, чтобы лишнее, а хочется попроще<br>
<br>
в общем решил так сделать:<br>
все в бинарном режиме:<br>
&lt;кол-во файлов в архиве&gt;&lt;имя файла&gt;&lt;нуль-терминатор&gt;&lt;сколько байт занимает&gt;&lt;имя файла&gt;&lt;нуль-терминатор&gt;&lt;сколько байт занимает&gt;...&lt;байты 1го файла&gt;&lt;байты 2го файла&gt;...&lt;байты Nго файла&gt;EOF<br>
<br>
насколько помню встроенного поиска информации в бин.файлах нет (типа функции strchr для строк), поэтому вся обработка побайтовая<br>
зная кол-во файлов будет легко встать на 1ый байт 1го файла, для этого нужно в цикле встретить столько же раз нуль-терминатор, а дальше через fseek(SEEK_CUR) смещение к началу нужного файла<br>
<br>
удаление файла из архива происходит побайтовым копированием с пропуском тех байтов, которые нужно удалить <br>
и т.д.<br>
<br>
ВРОДЕ все гладко или есть ужаснейшая ошибка в такой структуре, которая ставит КРЕСТ на этом???]]></description>
        <author>FasterHarder</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=421102&amp;view=findpost&amp;p=3843674</guid>
        <pubDate>Fri, 15 Jan 2021 22:31:54 +0000</pubDate>
        <title>Создать архив из файлов, только функции СИ</title>
        <link>https://forum.sources.ru/index.php?showtopic=421102&amp;view=findpost&amp;p=3843674</link>
        <description><![CDATA[ЫукпШ: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=421102&view=findpost&p=3843668'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>FasterHarder &#064; <time class="tag-quote__quoted-time" datetime="2021-01-15T20:05:26+00:00">15.01.21, 20:05</time></span><div class='quote '>а вот это служебная информация перед файлом ведь тоже по сути набор байт. Как мы их отличим от файловых байтов??</div></div><br>
По расположению их в файле.<br>
Сам файл можешь начать с метки вначале - что это именно &quot;твой&quot; архив.<br>
А дальше начинай придумывать формат (расположение) байт различного назначения.<br>
Тщательно опиши назначение каждого байта и его расположение в записи,<br>
чтобы потом не путаться.<br>
Например - начнём архивный файл с метки &quot;XxMm&quot;.<br>
Дальше поставим цифры - версию архива. Допустим 1.0.<br>
Можно по-байтно подсчитать, сколько это сначала.<br>
Дальше пишем имя файла. С нулём на конце.<br>
Значит, можем определить длину. Дальше uint32 - длина файла в байтах.<br>
Затем байт - тип файла. байт - тип сжатия.<br>
Затем uint32 - упакованный размер.<br>
Как-то так. Далее сам файл (в количестве упакованного размера).<br>
Значит, мы точно можем определить начало и конец файла в байтах<br>
и начало следующей служебной записи.<br>
Итд.<br>
---<br>
Может что я и забыл (или лишнего придумал) - дело творческое.<br>
Додумывай сам.<br>
---<br>
Возможны варианты - можно все служебные записи соредоточить сначала<br>
архива, а далее - данные файлов.<br>
Тогда в служемной записи должно указываться смещение каждого файла от начала архива<br>
итд итп.<br>
---<br>
я нечто такое делал - это не сложно, вариантов реализаций может быть много.]]></description>
        <author>ЫукпШ</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=421102&amp;view=findpost&amp;p=3843668</guid>
        <pubDate>Fri, 15 Jan 2021 20:05:26 +0000</pubDate>
        <title>Создать архив из файлов, только функции СИ</title>
        <link>https://forum.sources.ru/index.php?showtopic=421102&amp;view=findpost&amp;p=3843668</link>
        <description><![CDATA[FasterHarder: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=421102&view=findpost&p=3843666'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>ЫукпШ &#064; <time class="tag-quote__quoted-time" datetime="2021-01-15T19:19:45+00:00">15.01.21, 19:19</time></span><div class='quote '>Если сделать только это, тогда мы не сможем прочитав архив<br>
восстановить файлы на диске.</div></div><br>
хорошо, ты все правильно пишешь и что самое важное - я все понял из того, что написал мне - это оч.большая редкость на форумах, ооооооооооочень)<br>
<br>
я так понимаю, что перенос файлов делать будем (ну, хорошо, буду) ) побайтово. Файлы у нас сжаты. Байты в файлах неотличимы друг от друга.<br>
а вот это служебная информация перед файлом ведь тоже по сути набор байт. Как мы их отличим от файловых байтов?? Ведь при сжатии информации могут быть любые значения в байтах.<br>
<br>
а так в целом мне все понятно, спс) надо лишь разобраться со служебной инфой и можно кодить прожку.]]></description>
        <author>FasterHarder</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=421102&amp;view=findpost&amp;p=3843666</guid>
        <pubDate>Fri, 15 Jan 2021 19:19:45 +0000</pubDate>
        <title>Создать архив из файлов, только функции СИ</title>
        <link>https://forum.sources.ru/index.php?showtopic=421102&amp;view=findpost&amp;p=3843666</link>
        <description><![CDATA[ЫукпШ: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=421102&view=findpost&p=3843665'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>FasterHarder &#064; <time class="tag-quote__quoted-time" datetime="2021-01-15T18:53:39+00:00">15.01.21, 18:53</time></span><div class='quote '>или без винапи здесь вообще ни туда ни сюда?</div></div><br>
WinApi - это другая ось координат.<br>
Архивы и в DOS и в Linux бывают.<br>
На CodeProject можно вообще найти реализацию zip/unzip.<br>
---<br>
&quot;...взять файл и добавить его внутрь другого файла..&quot;<br>
А что такого ?<br>
Ты же программист - значит изобретатель алгоритмов.<br>
Открываем некий файл на запись.<br>
2-й на чтение.<br>
Читаем последовательно 2-й и пишем данные в 1-й.<br>
Потом открываем на чтение 3-й.<br>
Продолжаем процесс.<br>
итд.<br>
По окончании закрываем 1-й файл - теперь внутри него много<br>
файлов, это &quot;архив&quot;.<br>
---<br>
Если сделать только это, тогда мы не сможем прочитав архив<br>
восстановить файлы на диске.<br>
Тогда перед файлом в архиве добавим служебную запись.<br>
Запишем туда имя файла, размер файла, способ упаковки,<br>
размер упакованного итп.<br>
Тогда можно будет:<br>
1.Перечислить файлы в архиве.<br>
2.Извлекать файлы из архива.<br>
3.Добавлять файлы в архив.<br>
4.Удалять из архива.<br>
---<br>
Возможны варианты.<br>
Можно алгоритм файловой системы FAT реализовать - он не очень сложный.]]></description>
        <author>ЫукпШ</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=421102&amp;view=findpost&amp;p=3843665</guid>
        <pubDate>Fri, 15 Jan 2021 18:53:39 +0000</pubDate>
        <title>Создать архив из файлов, только функции СИ</title>
        <link>https://forum.sources.ru/index.php?showtopic=421102&amp;view=findpost&amp;p=3843665</link>
        <description><![CDATA[FasterHarder: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=421102&view=findpost&p=3843664'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>ЫукпШ &#064; <time class="tag-quote__quoted-time" datetime="2021-01-15T18:45:49+00:00">15.01.21, 18:45</time></span><div class='quote '>Ты сам хочешь изобрести вариант или в поисках уже известного способа ? </div></div><br>
может есть готовые функции какие-то в СТАНДАРТЕ си, типа ExtractFile, AddFileToArchive)<br>
если честно, то я даже технологию не представляю, как можно взять файл и добавить его внутрь другого файла...<br>
<br>
или без винапи здесь вообще ни туда ни сюда? но винапи такая шляпа сложная, что там с наскока вообще нереал что-либо сделать, годы потребуются на изучение винапи]]></description>
        <author>FasterHarder</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=421102&amp;view=findpost&amp;p=3843664</guid>
        <pubDate>Fri, 15 Jan 2021 18:45:49 +0000</pubDate>
        <title>Создать архив из файлов, только функции СИ</title>
        <link>https://forum.sources.ru/index.php?showtopic=421102&amp;view=findpost&amp;p=3843664</link>
        <description><![CDATA[ЫукпШ: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=421102&view=findpost&p=3843662'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>FasterHarder &#064; <time class="tag-quote__quoted-time" datetime="2021-01-15T16:23:29+00:00">15.01.21, 16:23</time></span><div class='quote '>...А как их засунуть программно в архив, допустим с расширением &quot;.xxx&quot;.</div></div><br>
Ты сам хочешь изобрести вариант или в поисках уже известного способа ?]]></description>
        <author>ЫукпШ</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=421102&amp;view=findpost&amp;p=3843662</guid>
        <pubDate>Fri, 15 Jan 2021 16:23:29 +0000</pubDate>
        <title>Создать архив из файлов, только функции СИ</title>
        <link>https://forum.sources.ru/index.php?showtopic=421102&amp;view=findpost&amp;p=3843662</link>
        <description><![CDATA[FasterHarder: Всем хай&#33; Сходу к делу&#33;<br><br>Вот допустим есть у меня 10 файлов на диске. Допустим умею сжимать их Хаффманом или арифметическим кодированием. А как их засунуть программно в архив, допустим с расширением &quot;.xxx&quot;. Допустим, что знаю функции работы с файлами fopen, fgets и пр. функции языка СИ.<br><br>Это вообще как реализуется??<br>допустим, что гуглил, там чего-то через винапи мутят какую-то шляпу абсолютно мне непонятную. <br><br>Есть простое и быстрое решение проблемы программным путем, допустим на &quot;чистом&quot; Си?)]]></description>
        <author>FasterHarder</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      </channel>
      </rss>
	