for /L %f in (1,1,500) do @echo zzzzzzzzzzzzzzzzzzzzzzzzzzzz-6ren">
gpt4 book ai didi

c# - 我的 C# 程序出现错误 "The process tried to write to a nonexistent pipe"

转载 作者:行者123 更新时间:2023-12-02 20:56:34 26 4
gpt4 key购买 nike

我在尝试编写显示大文件前 5 行的程序时遇到错误。

C:\blah\aeea2>for /L %f in (1,1,500) do @echo zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz >>testfile

上面生成了我的文件。它有 500 行,每行都有 z 字符。

C:\blah\aeea2>dir
Volume in drive C has no label.
Volume Serial Number is B411-D580

Directory of C:\blah\aeea2

16/10/2016 05:48 AM <DIR> .
16/10/2016 05:48 AM <DIR> ..
16/10/2016 05:42 AM 388 prog.csc
16/10/2016 05:42 AM 4,096 prog.exe
16/10/2016 05:48 AM 19,500 testfile
3 File(s) 23,984 bytes
2 Dir(s) 2,879,127,552 bytes free

你可以在这里看到我的程序

C:\blah\aeea2>type prog.csc
class a{
public static void Main(string[] args) {
string line;
System.Collections.Generic.List<string> lststr = new System.Collections.Generic.List<string>();
int i=0;
while( (line=System.Console.In.ReadLine())!=null ) {i++; lststr.Add(line); if(i==5) break;}
for(i=0; i<lststr.Count; i++) System.Console.WriteLine(lststr[i]);
}
}

这是错误

C:\blah\aeea2>type testfile| prog.exe
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
The process tried to write to a nonexistent pipe.

C:\blah\aeea2>

但它适用于非常小的文件

C:\blah\aeea2>type smallfile.txt
a
b
c
d
e
f
g
h
i
j
C:\blah\aeea2>type smallfile.txt| prog.exe
a
b
c
d
e

C:\blah\aeea2>

最佳答案

这不是您的程序,它实际上是 type 命令。

type 将尝试将完整的文件内容写入管道并将其发送到您的程序。但您的程序仅消耗前 5 行并退出。因此 type 提示不再存在的消费者(管道)。

为了使其在没有警告/错误的情况下工作,最好使用完整的输入,而不是在 i == 5 之后中断并直接将其丢弃。但是,它会通过读取不需要的内容来浪费 CPU 和 IO。

它适用于较小文件的原因是剩余字节适合管道缓冲区(通常为 4kB、8kB,在所有 Windows 系统上并非 100% 确定)。

由巴洛普添加

涉及上述内容以及命令、gnuwin32 cat、cygwin cat 以及环境 cmd 和 cygwin 的一些有趣的发现,我发现了以下内容。

通过 zbynek 的调整(使我的程序读取大量内容),它们都可以工作(/不会遇到错误)。

但是没有zbynek的调整 -

gnuwin32 cat 命令在 cmd 中不起作用,它的行为与 type 类似,并且在输出行后,它显示“写入错误:无效参数”

如果从 cmd 执行 cygwin cat 命令,则不起作用,它显示“写入错误:设备上没有剩余空间”

Windows“更多”命令在 cmd 中运行(或者不出所料,在 cygwin 中运行)。因此可以使用它来代替“类型”。

从 cygwin 开始,cat - 无论是 gnuwin32 cat 还是 cygwin cat,都可以工作。

我会从 cygwin 测试“type”,但我尝试过,但我不认为 cygwin 可以运行 type,它内置于 cmd.exe shell 中,没有自己的可执行文件,我不认为 cygwin可以看到。

关于c# - 我的 C# 程序出现错误 "The process tried to write to a nonexistent pipe",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40066965/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com