2011-12-16 2 views
1

У меня есть несколько частей одного файла, который я хочу, чтобы плагин C++/C# для третьей стороны читался как один файл. В принципе, когда считыватель файлов плагинов доходит до конца одной файловой части, я хочу, чтобы он продолжал следующий.Имитировать конкатенированный файл с использованием жесткой ссылки?

(Для тех, кто заинтересован, плагин Aforge.Net FFMpeg, и я пытаюсь импортировать VOB файлы)

Похоже, довольно задачу перепрограммировать плагин. Альтернативным решением является копирование частей файла в конкатенированный файл, но это происходит медленно, потому что я имею дело со многими ГБ данных.

Можно ли использовать жесткую ссылку файловой системы, чтобы указать на несколько файлов? Или есть другой способ «подделать» конкатенированный файл? Используя командную строку FFMpeg, я могу использовать 'type' для трансляции живого потока, но не могу понять, как это сделать в C# с этим плагином.

Я нахожусь на Windows 7.

ответ

0

Нет это не, жесткий ссылка указывает только один файл.

У вас есть дополнительные сложности, что ваше приложение является приложением третьей стороной ... Единственное решение, которое я вижу в том, чтобы написать динамический объект переопределение методов файлов только для конкретного пути таким образом, что, например, read() начнется с первого файла, а затем перейдем ко второму после того, как закончим третий и т. д. Uh. Удачи!

1

Жесткая ссылка может ссылаться только на один I-узел, поэтому жесткая ссылка не поможет. Однако FIFO или именованный канал будут. В оболочке UNIX, вы можете сделать:

$ mkfifo catenated 
$ cat a b c >catenated & 

Программа, которая считывает из файла «catenated» теперь будет получить все три файла (а, б и в) сцепляются друг с другом. Как только данные из всех трех файлов будут прочитаны, программа «cat» завершится. Microsoft Windows также имеет такие функции (см. named pipe).

Обратите внимание, что труба не доступна для поиска. Если программа, считывающая конкатенированные данные, пытается искать, она не удастся. Если конкатенацию нужно искать, необходимо использовать что-то более сложное (виртуальная файловая система «FUSE?»).

+0

Труба работает с FFMPEG, но я не могу понять, как использовать трубу в C#. Плагин ожидает ввода строки пути. – Sugrue

+0

Хорошо. Прочтите немного. Именованные каналы поддерживаются в .Net 3.5 - отлично. Теперь мне нужно выяснить способ превращения именованного канала в какую-то строку пути! – Sugrue

+0

Есть еще одна проблема, однако, это будет кошка только один раз. Вам понадобится дополнительная программа или еще что-то, что зацикливается над командой cat. _And_ вы не можете читать более одного раза в одно и то же время. – fge

0

Это может быть лучше всего обработать с помощью avisynth. Прошло много лет с тех пор, как я использовал его, но IIRC, вы можете использовать его для создания конкатенации видеофайлов, чтобы они отображались как один файл. Я не помню подробностей, но файлы сценариев ведут себя так, как будто они являются видеофайлами и могут использоваться как источник в большинстве приложений для редактирования видео.

Смежные вопросы