在Windows上,我可以使用命名管道作为文件吗?

时间:2012-06-08 02:52:18

标签: c# io ipc named-pipes

我使用我的.NET应用程序创建一个命名管道服务器,其名称为" TSPipe"。然后我打开记事本并尝试将文件保存到" \。\ pipe \ TSPipe"。然后,我希望能够阅读记事本写入该管道的内容。

我还在处理处理NamedPipeServerStream的线程的一般逻辑,但这里是我的命名管道服务器的代码:

    public void PipeThread() {
        var sid = new SecurityIdentifier(WellKnownSidType.WorldSid, null);
        var rule = new PipeAccessRule(sid, PipeAccessRights.ReadWrite, AccessControlType.Allow);
        var sec = new PipeSecurity();

        sec.AddAccessRule(rule);

        while (continuePipeThread) {
            pipeStream = new NamedPipeServerStream("TSPipe", PipeDirection.In, 100, PipeTransmissionMode.Byte, PipeOptions.None, 0, 0, sec);

            Program.Output.PrintLine("Waiting for connection...");

            pipeStream.WaitForConnection();

            Program.Output.PrintLine("Connected, reading...");

            byte[] data = new byte[1024];
            int lenRead = 0;
            lenRead = pipeStream.Read(data, 0, data.Length);
            string line = System.Text.Encoding.ASCII.GetString(data, 0, lenRead);

            Program.Output.PrintLine(line);

            pipeStream.Close();
            pipeStream.Dispose();
        }
    }

提前感谢您的任何帮助,但如果有任何建议有帮助,我会通知您。

1 个答案:

答案 0 :(得分:4)

您无法从记事本写入命名管道。使用您的代码,当我尝试写入\\\\.\pipe\TSPipe时,记事本会自动将其更正为UNC路径\\\\pipe\TSPipe。我尝试了其他一些应用程序,但它们也没有用。除了将输入的名称传递给CreateFile之外,它们似乎运行了一些逻辑。

但运行echo Hello, Word! > \\\\.\pipe\TSPipe之类的内容会将文本Hello, World!发送到管道服务器。

所以我猜这个问题的答案是“在Windows上,我可以使用命名管道作为文件吗?”有时候。