2011-12-16 39 views
1

我有一个单一文件的多个部分,我希望第三方C++/c#插件可以读取为单个文件。基本上,当插件文件读取器到达一个文件部分的末尾时,我希望它继续到下一个文件部分。使用硬链接来模拟连接文件?

(任何有兴趣,这个插件是Aforge.Net FFmpeg的,我试图导入VOB文件)

它看起来像一个相当的任务重新编程插件。另一种解决方案是将文件部分复制到连接文件中,但这很慢,因为我正在处理很多GB数据。

是否可以使用文件系统硬链接来指向多个文件?还是有其他方法来“伪造”连接文件?使用命令行FFMpeg我可以使用'type'来流式连接文件,但我无法弄清楚如何在C#中使用这个插件实现这一点。

我在Windows 7上。

回答

0

不,它不是,硬链接指向只有一个文件。

你有增加的复杂性,你的应用程序是一个第三方应用程序......唯一的解决方案,我看是写一个动态对象重写文件的方法只针对特定路径,这样,例如,read()将从第一个文件开始,然后在完成第三个等等之后继续到第二个文件。祝你好运!

1

硬链接只能引用一个I节点,所以硬链接将无济于事。然而,FIFO或命名管道将会。在UNIX shell,你可以这样做:

$ mkfifo catenated 
$ cat a b c >catenated & 

的程序,从“链中”读取文件现在将得到所有三个文件(A,B和C)连接在一起。一旦所有三个文件的数据都被读取,“猫”程序将终止。 Microsoft Windows也具有此类功能(请参阅named pipe)。

请注意,管道不可搜索。如果读取连锁数据的程序尝试寻找,它将失败。如果连接需要被寻找,那么需要使用更复杂的东西(虚拟文件系统?FUSE?)。

+0

管道工程与FFMPEG,但我不知道如何在c#中使用管道。该插件需要一个路径字符串作为输入。 – Sugrue 2011-12-16 13:19:46

0

这可能是最好的处理avisynth。我使用它已经有好几年了,但是IIRC,您可以使用它来编写视频文件连接的脚本,使它们显示为单个文件。我不记得细节,但脚本文件的行为就像是一个视频文件,可以在大多数视频编辑应用程序中用作源文件。