5

ファイル記述子 3 からクライアント プログラムからメッセージを読み取る従来のアプリがあります。これは外部アプリであるため、これを変更することはできません。クライアントは C# で記述されています。C# で特定のファイル記述子への接続を開くにはどうすればよいですか? AnonymousPipeClientStream() のようなものを使用できますか? しかし、接続先のファイル記述子をどのように指定すればよいのでしょうか?

4

2 に答える 2

5

残念ながら、最初にネイティブ Windows API を P/Invoking しないと、これを行うことはできません。

まず、ネイティブの P/Invoke 呼び出しでファイル記述子を開く必要があります。これは、OpenFileById WINAPI 関数によって行われます。MSDN での使用方法は次のとおりです。MSDN フォーラムで詳しく説明している別のリンクがあります。P/Invoke 呼び出しの作成方法に関するヘルプ (pinvoke.net) もあります。

ファイル ハンドルを取得したら、それを SafeFileHandle にラップする必要があります。今回は、安全なマネージド C# を使用します。

// nativeHandle is the WINAPI handle you have acquired with the P/Invoke call
SafeFileHandle safeHandle = new SafeFileHandle(nativeHandle, true);

これで、ファイル ストリームを直接開くことができます。

Stream stream = new FileStream(safeHandle, FileAccess.ReadWrite);

この時点から、C# の他のファイルまたはストリームとして使用できます。完了したら、オブジェクトを破棄することを忘れないでください。

于 2009-01-29T22:27:48.317 に答える