5

今日、ちょっとばかげた問題に遭遇しました。

私のプロジェクトでは、ライブラリを使用する必要があります(置き換えることはできません)。彼の問題はMemoryStream、HDDに頻繁に保存する代わりに使用していることです(ファイルが多く、サイズが小さいため、完璧です用MemoryStream)。問題は、ライブラリ API がファイルシステム アクセスを中心に構築されていることです。また、関数の 1 つがファイルへの直接パスのみを受け入れます。

FileStream実際にハードドライブに触れずに新しいメソッドを作成する文字列 (パス) をメソッドに送信するにはどうすればよいですか?

たとえば、「\MEMORY\myfile.bin」?

4

4 に答える 4

1

まあ-それは考えです。
基本的に、考えられる解決策は次の 3 つです。

  1. リフレクタを使用して、指定されたライブラリを変更できます。
  2. 適切なメソッドを調べることができます。次に、リフレクション マジックを使用することで、実行時にオブジェクトを変更できる場合があります (あまりお勧めしません)
  3. システム コールと API をいじることができます。低レベルの ring0 アセンブリを変更kernal.dllして、パスからメモリへの I/O クエリをリファラーに変更します。(おそらく、ring0 アクセスがなくても可能です。よくわかりません)。

明らかに、最も推奨されるのは、指定されたライブラリを変更するためにリフレクターを使用することです。そうしないと、解決策がわかりません。

最初のコメントに応じて、次のことができます:
RAMDrive (システム メモリの小さなチャンクを割り当て、それをパーティションとして表示するプログラム) を使用します。

于 2012-07-13T17:30:52.780 に答える
1

それはすべて、ライブラリの構築方法に依存します。

を使用する 100% マネージド ライブラリのFileStream場合は、おそらく行き詰っています。

提供されたファイル名を受け取り、ネイティブの WIN32CreateFile関数を呼び出す場合、名前付きパイプなどのファイル以外のものを与えることができます。

可能かどうかをすばやくテストする@"\\.\pipe\random_name"には、メソッドに渡します: で始まるパイプとファイル名を開けないことを明示的に言って応答する場合は\\.\、申し訳ありません。一方、ファイルが見つからないというメッセージが表示された場合は、ファイルを機能させるチャンスがあります。

次に、 を作成し、前に を付けたNamedPipeServerStreamライブラリ メソッド呼び出しに同じ名前を使用できます\\.\pipe\

于 2012-07-13T17:55:30.590 に答える
1

ファイルがディスク上に存在する必要がある場合 (およびディスク パスのみが受け入れられる場合)、主なオプションは、カスタム データをファイル システムとして公開できる仮想ファイル システムです。Dokan、Solid File System OS Edition、Callback File System ( Virtual Storage製品ラインの説明を参照) など、いくつかのオプションがあり、Pismo File Mount が機能する可能性があります (詳しく調べたことはありません)。

于 2012-07-13T17:51:47.730 に答える
0

StreamWriterファイルとして「表現」することはできませんが、クラスを使用してファイルに「変換」することはできます。

于 2012-07-13T17:25:43.937 に答える