четверг, 25 февраля 2010 г.

[prog.humour] Как взять первую часть файла в Windows с помощью подручных средств?

Вчера вечером пытался решить простенькую задачку: на нетбуке из большого (порядка 8Gb) eMule-овского временного файла нужно было взять первых 100Mb и записать на флэшку, чтобы сделать preview на телевизоре (сам нетбук 1020p видео не тянет в принципе). Сделать это нужно было с помощью подручных средств – штатных утилит Windows Vista да Far с Rar-ом. Никаких средств разработки на нетбуке не было. А аналогов Unix-овых head и tail в Windows, насколько мне известно, нет.

Первая мысль была поискать в Интернете какой-нибудь готовый splitter для файлов. Но это мне показалось неспортивным. Поэтому обошелся rar-ом. Сначала запускается архивация временного файла в многотомный архив с нулевым сжатием (rar a –m0 –v100m), которая прерывается после формирования первой части архива. Затем из этой первой части на флэшку распаковывается то, что там оказалось – как раз приблизительно 100Mb из большого временного файла :)

Голь, как водится, на выдумки хитра. На том и стоим, а точнее – лисапеды придумываем ;)

Но интересно, можно ли было сделать тоже самое при наличии Windows Vista и Far-а по-другому?

16 комментариев:

  1. bat-ники это прошлый век
    наш выбор - это JScript, который есть на всех виндах.

    Единственно Верный (TM) язык JavaScript позволяет реализовать сколь угодно сложную логику.
    А доступ к большинству COM-обьектов даёт офигенную свободу действий.

    Путём небольших извращений на нём можно работать и с бинарниками тоже:

    http://www.motobit.com/tips/detpg_read-write-binary-files/

    Моё ИМХО: батники зло, поскольку они всё равно не кросплатформенны да и к тому же абсолютно нечитабельны и неотлаживаемы.

    PS да, а если нужен UI - есть HTA, который тоже есть на всех без исключения виндах.

    ОтветитьУдалить
  2. Ну я, в принципе, вообще без батников обошелся -- там всего-то две команды нужно выполнить.

    >http://www.motobit.com/tips/detpg_read-write-binary-files/

    Ой, чой-то мне захотелось на все свои компьютеры ставить Ruby. Там все как-то попроще ;)

    ОтветитьУдалить
  3. Да, остроумно ;)
    Другой способ - всё же воспользоваться юниксовыми head и tail, которые всё же есть в винде.
    Если нет, то идём Control Panel -> Programs and Features -> Turn Windows Features on or off, ставим себе Subsystem for UNIX-based Applications и радуемся юниксовым тулзам и тулчайну (cc/gcc, pthread.h, signal.h, stdint.h и всё такое)

    ОтветитьУдалить
  4. >Другой способ - всё же воспользоваться юниксовыми head и tail,

    Не, не нашел я в своей русской Windows Vista Business такой подсистемы :(

    ОтветитьУдалить
  5. Вот! Недоплатил за нормальную версию! :)
    Она доступна в серверных ОС и в клиентских типа Ultimate и Enterprise:
    http://en.wikipedia.org/wiki/Interix
    Ну тогда просто Cygwin ;)

    ОтветитьУдалить
  6. не знаю, мне в плане "языка для скриптов автоматизации" не понравился даже питон - слишком сложен. Не нужны такому языку классы и прочие навороты, ИМХО. JavaScript наше всё :)

    ОтветитьУдалить
  7. >Вот! Недоплатил за нормальную версию! :)

    Вот какое фуфло мне, оказывается, впарил HP вместе с нетбуком! :)))

    ОтветитьУдалить
  8. 2Left:

    Ну драться по этому поводу мы не будем :)

    В шатной поставке Ruby есть такая классная вещь, как интерактивная среда -- irb. Я в ней как-то похожую задачу (только там, кажется нужно было еще с именами файлов манипулировать) решал -- все вылилось в 7-8 строк кода прямо в irb. И после выполнения каждой из строк я видел ее результат. Было здорово.

    ОтветитьУдалить
  9. > И после выполнения каждой из строк я видел ее результат. Было здорово.

    Чо, прям превью видео показал?

    ОтветитьУдалить
  10. >Чо, прям превью видео показал?

    Ох, ё! Как же я сразу-то не додумался! :(

    :)))

    По большому счету -- как нефиг делать -- сповнуть из irb TheKMPlayer/SMPlayer/VLC и всех делов. А особые извращенцы, через Win32ole могли бы какой-нибудь WindowsMediaPlayer запустить :)

    ОтветитьУдалить
  11. А аналогов Unix-овых head и tail в Windows, насколько мне известно, нет.
    Все уже портировано:
    1) http://sourceforge.net/projects/tailforwin32/files/
    2) http://gnuwin32.sourceforge.net/packages/coreutils.htm

    ОтветитьУдалить
  12. >Все уже портировано

    Ну, это-то я знаю, но интересно было сделать не качая ничего :)

    Кстати, cygwin мне больше нравится. По крайней мере tar из cygwin-а с tarball-ом SObjectizer-а справляется в лет. А вот из gnuwin32 -- нет.

    ОтветитьУдалить
  13. Ограничения на плагины к Far в условиях задачи нет? :) Если так, то задача решается с помощью плагина Surgeon.

    ОтветитьУдалить
  14. 2yudincev: спасибо, будем знать теперь про этот плагин.

    ОтветитьУдалить
  15. в тотал-командере есть возможность разбить файл.
    для фара тоже можно такой плугин поискать...

    ОтветитьУдалить
  16. 2night beast:

    >в тотал-командере есть возможность разбить файл.

    Не смог заставить себя пользоваться тоталом. Но раз в нем такая возможность есть -- это хорошо.

    ОтветитьУдалить