2011-12-16 11 views
1

私はサードパーティのC++/C#プラグインを1つのファイルとして読みたいという、1つのファイルの複数の部分を持っています。基本的には、プラグイン・ファイル・リーダーが1つのファイル部分の最後まで来たときに、次のファイル・パートに進む必要があります。ハードリンクを使用して連結ファイルをシミュレートしますか?

(興味がある人のために、プラグインがAforge.Net FFMPEGである、と私はVOBファイルをインポートしようとしています)

これは、プラグインを再プログラムするためにはかなりの作業のように見えます。別の解決策は、ファイル部分を連結ファイルにコピーすることですが、私は多くのGBのデータを扱っているため、これは遅いです。

ファイルシステムのハードリンクを使用して複数のファイルをポイントすることはできますか?または、連結ファイルを「偽造する」他の方法がありますか?コマンドラインFFMpegを使用すると、 'type'を使用してストリームを連結してストリームを再生できますが、このプラグインでC#でこれを達成する方法を理解できません。私はWindows 7の

答えて

0

日午前

はありません、それは、一つだけのファイルへのハードリンクのポイントではありません。

あなたのアプリはサードパーティ製のアプリです...私が見る唯一の解決策は、なるように、特定のパスのファイル方法をオーバーライド動的オブジェクトを書くことであろう追加の複雑さ、例えば、read()を持っています最初のファイルから始まり、次に3番目のファイルを終了した後に2番目のファイルに進みます。がんばろう!

1

ハードリンクは1つのIノードのみを参照できるため、ハードリンクは役に立ちません。ただし、FIFOまたは名前付きパイプが使用されます。 UNIXシェルでは、あなたが行うことができます:

$ mkfifo catenated 
$ cat a b c >catenated & 

ファイルから読み込むプログラムを今すぐすべての3つのファイル(a、b、cは)一緒に連結されます「鎖状に連結」。 3つのファイルすべてからのデータが読み込まれると、「cat」プログラムは終了します。 Microsoft Windowsにもこのような機能があります(named pipe参照)。

パイプはシークできないことに注意してください。連結されたデータを読み取るプログラムがシークしようとすると、失敗します。連結がシーク可能である必要がある場合、より複雑なもの(仮想ファイルシステムFUSE?)を使用する必要があります。

+0

パイプはFFMPEGで動作しますが、C#でパイプを使用する方法を理解できません。プラグインは、入力としてパス文字列を要求します。 – Sugrue

+0

少し読んでください。 Named Pipesは.Net 3.5でサポートされています。名前付きパイプをある種のパス文字列に変換する方法を理解する必要があります。 – Sugrue

+0

もう一つの問題がありますが、これは猫に一度しか出ません。あなたは、catコマンドをループする追加のプログラムまたはその他のものが必要になります。 _そして、同時に複数回読むことはできません。 – fge

0

これは、avisynthで最もよく処理されます。私が使ってから数年経っていますが、IIRCを使ってビデオファイルの連結をスクリプト化して1つのファイルとして表示することができます。詳細は覚えていませんが、スクリプトファイルはあたかもビデオファイルであるかのように動作し、ほとんどのビデオ編集アプリケーションでソースとして使用できます。

関連する問題