我想编写一个具有不同行为的控制台应用程序,具体取决于输入是来自键盘还是来自文件.
可能吗?在C#中最优雅的方法是什么?
有没有办法从C#中的stdin读取二进制数据?
在我的问题中,我有一个程序,它启动并在stdin上接收二进制数据.基本上:
C:>myImageReader < someImage.jpg
我想写一个程序,如:
static class Program
{
static void Main()
{
Image img = new Bitmap(Console.In);
ShowImage(img);
}
}
Run Code Online (Sandbox Code Playgroud)
但是Console.In不是Stream,它是TextReader.(如果我尝试读取char [],TextReader会解释数据,不允许我访问原始字节.)
有人知道如何访问实际的二进制输入?
干杯,莱夫
我有一个模块读取进程的StandardError.一切都很好,但我想做一些不同的事情.我不知道如何像本机方式重定向stdin:
app1.exe -someargs | app2.exe -someargs
app2在其标准输入中读取app1的所有标准输出.
我正在编写一个带有2个参数的C#控制台应用程序: myprogram.exe param1 param2
param2 是可选的,想法是如果它不存在,获取管道数据:
echo "hithere" | myprogram.exe param1
Run Code Online (Sandbox Code Playgroud)
我通过捕获Console.In.ReadToEnd()仅传递1个参数时使这部分工作.
我面临的问题是,当只传递1个参数并且没有数据被管道传输时,它只是在那里听取用户输入,并且关闭的唯一方法是Ctrl+C结束程序.
相反,有没有办法返回错误并退出程序,如果只提供了1个参数,没有数据被管道?
为了测试是否有任何等待,我尝试使用:
Console.OpenStandardInput().CanReadConsole.OpenStandardInput().LengthConsole.In.Peek()那没用.
我也试过了这个stackoverflow问题底部提到的'hack':C#Console接收带管道的输入.
有任何想法吗?
新 C#er 在这里。我正在制作基于控制台的 RPG。进展顺利,但我需要找出如何保存游戏。我猜想有一种方法可以将我的应用程序中的变量保存到文本文件中,该文件可用于在应用程序再次运行时加载变量。不幸的是,我不知道从哪里开始。
另外,我需要一种在加载保存文件时转到代码中某个点的方法。
我的一些变量包括:
int xCoordinate, yCoordinate, hp, hpmax, level;
Run Code Online (Sandbox Code Playgroud)
任何示例代码将不胜感激。
我需要构建一个接受管道作为输入的简单控制台应用程序。我们正在运行 Windows Server 2012。数据来自另一个应用程序,该应用程序将“管道”输入到此应用程序。我从 Linux 的角度了解管道,但从 Windows 的角度不太了解它们。
我最好的猜测是我需要像这样将输入发送到我的应用程序:C:\app.exe < test.txt
当使用 '<' 字符时,我目前的理解是它将 test.txt 转换为流并传入一个指针。
我的问题是,任何人都可以给我一个如何接收流指针的示例,或者在我的应用程序中的窗口中类似于管道的东西,以便我可以读取输入?
如何从标准输入读取并写入标准输出.System.Diagnostics.Process.StandardInput的MSDN引用没有帮助,因为它单独启动进程,然后重定向标准输入/输出但是如果进程已经运行并调用我的应用程序来为它提供一些数据.这是一个让事情变得清晰的例子:
我只是使用Unix管道,即cygwin中的cat命令(类似Linux的环境中的Linux),它基本上只读取标准输入并打印到标准输出.以下是命令:
%cat input/sample.txt | SRC/CSHARP/maptest
但这似乎不起作用.
如果有人知道ruby在这里,因为我不在这里我想在C#中做同样的事情:
#!/usr/bin/env ruby
STDIN.each_line
do |line|
some code here
end
Run Code Online (Sandbox Code Playgroud)
这里有一些我希望在c#或vb.net中完成的python等效代码:
#!/usr/bin/env python
import re
import sys
for line in sys.stdin:
val = line.strip()
Run Code Online (Sandbox Code Playgroud)
有解决方案吗
提前致谢.
我正在为我的applcation制作一个CMD,并且当我检查Console.ReadLine时,我发现了一个麻烦!= null
---完整代码---
string input = Console.ReadLine();
if(input!=null)
{
SomeFunction(input);
}
Run Code Online (Sandbox Code Playgroud)
---代码结束---
在SomeFunction()中我拆分了这个字符串,例如:
Console.WriteLine(input[0]);
Run Code Online (Sandbox Code Playgroud)
所以问题是:
如果用户点击输入一次,它就有效.但如果再次使用,我会得到一个例外:[0]不存在.