2011-12-16 38 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,您可以使用它來編寫視頻文件連接的腳本,使它們顯示爲單個文件。我不記得細節,但腳本文件的行爲就像是一個視頻文件,可以在大多數視頻編輯應用程序中用作源文件。