Объединение файлов в Windows и обратная операция - PullRequest
0 голосов
/ 27 октября 2011

В настоящее время я пытаюсь найти способ объединить несколько файлов, обычно все файлы из каталога (включая рекурсивный), в один поток для дальнейшей обработки. TAR выглядит очевидным кандидатом, за исключением того, что он не является стандартным в Windows, и, к сожалению, все версии, которые я мог найти (в основном варианты GNU TAR), слишком велики (несколько сотен КБ когда-то включали зависимости DLL). Мне нужно что-то намного меньшее.

Видимо, стандартная команда COPY могла бы добиться цели. Например, работает следующая команда: COPY / B исходный файл1 + исходный файл2 конечный файл

Тем не менее, есть еще 2 проблемы: я не знаю, как записать результат в стандартный вывод (для канала) и, что еще более важно, как выполнить обратную операцию?

Мне нужна небольшая утилита для выполнения этой задачи конкатенации, либо в исходном коде C, либо в стандартной команде Windows, либо в виде распространяемого двоичного файла. Не нужно уважать формат TAR (хотя это не плохо, если это так). И, очевидно, конкатенация должна быть обратимой.

Ответы [ 3 ]

2 голосов
/ 27 октября 2011

Я предлагаю использовать 7-zip.Имеет версию portable , может очень хорошо сжимать (или просто копировать без сжатия) все файлы, рекурсивно подкаталоги и записывать вывод в один поток (stdout).

Имеет "-so" (записьданные на стандартный вывод).Например,

7z x archive.gz -so > Doc.txt

распаковывает архив archive.gz в выходной поток, а затем перенаправляет этот поток в файл Doc.txt.

7z a -tzip -so -r src\*.cpp src\*.h > archive.zip 

сжимает все * .cpp- и *.h- файлы в каталоге src и всех его подкаталогах в стандартный поток вывода 7-Zip и запись этого потока в файл archive.zip (удалите «> archive.zip» и перехватите вывод вашей программой).

1 голос
/ 27 октября 2011

Почему вы не используете ZIP (отключите сжатие, если хотите)?Это очень стандартная поддержка, встроенная в Windows.См. Создание ZIP-файла в Windows (XP / 2003) на C / C ++

Чистая конкатенация необратима, потому что вы не можете знать, где ее снова разбить.Поэтому вам следует использовать каталог размеров блоков, например, существующий в форматах ZIP и TAR.

0 голосов
/ 28 октября 2011

Ну, Шелвин почти решил проблему.Версия Tar, которую он предлагает, является «постной» (~ 120 КБ) и не требует внешних зависимостей DLL.http://downloads.sourceforge.net/project/unxutils/unxutils/current/UnxUtils.zip

К сожалению, у него также есть некоторые собственные проблемы, такие как отсутствие поддержки символов Unicode, интерпретируемая escape-последовательность (поэтому имя каталога, начинающееся с t, запускает \ t, что считается табуляцией),и потенциальная проблема с реализацией канала в Windows XP (хотя в последнем случае это может быть сделано из другой программы).Так что это тупик.

Решение еще не найдено ...

[Редактировать] Шелвиен только что предоставил решение, создав «шар», замену смолы намного меньшей и гораздо более эффективной, без описанных ограничений.выше.Это решит проблему.

...