c# - 在 C# 中打开到文件描述符的管道连接

标签 c# .net winapi pinvoke file-descriptor

我有一个遗留应用程序,它从文件描述符 3 读取来自客户端程序的消息。这是一个外部应用程序,所以我无法更改它。客户端是用 C# 编写的。我们如何在 C# 中打开到特定文件描述符的连接?我们可以使用 AnonymousPipeClientStream() 之类的东西吗?但是我们如何指定要连接的文件描述符呢?

最佳答案

不幸的是,如果不先对 native Windows API 进行 P/调用,您将无法执行此操作。

首先,您需要使用 native P/Invoke 调用打开您的文件描述符。这是由 OpenFileById WINAPI 函数完成的。 Here's how to use it在 MSDN 上,here's an other link在 MSDN 论坛上对其进行了详细解释,并且 here's some help (pinvoke.net)关于如何构建 P/Invoke 调用。

获得文件句柄后,您需要将其包装在 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# 中的任何其他文件或流。完成后不要忘记处理对象。

关于c# - 在 C# 中打开到文件描述符的管道连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/245827/

相关文章:

.net - 简化 ReaderWriterLockSlim 语法

c# - Nuget 安装包成功但未向 csproj 添加引用

c++ - CreateFile(...) 具有异常路径如 "C:\\test\\\\file.txt"含义

c# - 从服务启动用户 session 中的进程

C++ 着色控制台输出

c# - 如何在我的程序中从站点获取图片?

c# - 为 if else 语句编写单元测试

c# - "Malformed Packet: TNS"从Oracle数据库检索数据

c# - 如何使用 razor 引擎使用图像 src 进行电子邮件模板化

c# - 在 razor 中添加 foreach 破坏了 if else 语句 block