[C#]使用Process的StandardInput与StandardOutput写入读取控制台数据

时间:2022-09-05 12:37:06

本文为原创文章、源代码为原创代码,如转载/复制,请在网页/代码处明显位置标明原文名称、作者及网址,谢谢!


开发工具:VS2017

语言:C#

DotNet版本:.Net FrameWork 4.0及以上

一、为了演示使用程序读取控制台数据,现在需要编写一个控制台程序,代码如下:

using System;

namespace Test
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
string content = Console.ReadLine();
if(content.ToUpper() == "TEST")
{
Console.WriteLine("You have type correctly.\r\nCongratulation!");
}
else
{
Console.WriteLine("Sorry,Uncorrectly!\r\nSee you later.");
}
}
}
}

这段代码的作用是:

1)在控制台输出“Hello World!”;

2)当输出“Test”(不管大小写),则输出:

You have type correctly.

Congratulation!

3)当输出其他时,则输出:

Sorry,Uncorrectly!

See you later.

以上是必备的应用程序,如果不使用该程序,可以使用System32文件夹下的cmd.exe来当做控制台应用程序;

二、将以上生成的程序Test.exe拷贝到D盘根目录下;

三、新建一个控制台应用程序(MainConsoleApp),来操作之前的控制台应用程序,并编写以下代码:

using System;
using System.Diagnostics; namespace MainConsoleApp
{
class Program
{
static void Main(string[] args)
{
Process proc = new Process
{
StartInfo = new ProcessStartInfo
{
FileName = @"D:\test.exe",
UseShellExecute = false,
CreateNoWindow = true,
RedirectStandardInput = true,
RedirectStandardOutput = true
}
};
proc.Start();
proc.StandardInput.WriteLine("Test");
string line = null;
while (!proc.StandardOutput.EndOfStream)
{
line += proc.StandardOutput.ReadLine() + Environment.NewLine;
}
Console.WriteLine(line);
proc.WaitForExit(); //再次启动
proc.Start();
proc.StandardInput.WriteLine("T");
string content = proc.StandardOutput.ReadToEnd();
Console.WriteLine(content);
proc.WaitForExit(); Console.ReadKey();
}
}
}

代码作用简介:

ProcessStartInfo.FileName:要启动的应用程序名称;

ProcessStartInfo.UseShellExecute:要重定向 IO流,Process对象必须将 UseShellExecute属性设置为false;

ProcessStartInfo.CreateNoWindow:是否以没有窗体的模式创建应用程序,默认为false,即有窗体,如为true,即隐藏窗体。在这里不设置该值也可以;

ProcessStartInfo.RedirectStandardInput:标准输入流的重定向,重定向至Process,我们可以通过Process.StandardInput.WriteLine将数据写入标准流;

ProcessStartInfo.RedirectStandardOutput:与RedirectStandardInput相反,这是标准输出流的重定向,我们可以通过Process.RedirectStandardOutput.ReadLine等方法读取标准流数据。

Process.StandardInput.WriteLine:将数据写入标准流;

Process.StandardOutput.ReadLine(或ReadToEnd):从标准流读取数据。

四、该程序将向Test.exe写入数据,并从Test.exe读回数据,这里使用了重定向技术,运行结果如下:

[C#]使用Process的StandardInput与StandardOutput写入读取控制台数据

我们可以看到,原来是Test.exe的程序,所有的数据操作都进行了重定向,直接在MainConsoleApp.exe进行了输入输出。

这个技术不仅仅可以用于以上的示例,还可以用于其他具有控制台输入输出的程序,如cmd.exe,这里不进行举例,自己进行试验即可。


我的博客即将同步至腾讯云+社区,邀请大家一同入驻。


[C#]使用Process的StandardInput与StandardOutput写入读取控制台数据的更多相关文章

  1. net快速写入/读取大量数据Postgresql

    Postgresql快速写入/读取大量数据 http://www.cnblogs.com/podolski/p/7152144.html 环境及测试 使用.net驱动npgsql连接post数据库.配 ...

  2. Postgresql快速写入/读取大量数据(.net)

    环境及测试 使用.net驱动npgsql连接post数据库.配置:win10 x64, i5-4590, 16G DDR3, SSD 850EVO. postgresql 9.6.3,数据库与数据都安 ...

  3. SharedPreferences写入和读出数据

    Android中有很多方法存储数据,如SharedPreferences.SQLite数据库等.简单数据的存储适用SharedPreferences. 本文使用SharedPreferences写入和 ...

  4. [原创]PostgreSQL Plus Advanced Server批量创建分区表写入亿级别数据实例

    当前情况:大表的数据量已接近2亿条我的解决思路:为它创建n*100个分区表,将各个分区表放在不同的tablespace上这样做的优点:1.首先是对这个级别的数据表的性能会有所提升2.数据管理更科学3. ...

  5. JXL读取写入excel表格数据

    问题描述: 使用java的jxl包创建.写入excel表格数据 问题解决: (1)说明 (2)写入execel数据 注: 以上是写入数据需要调用的函数接口 注: 具体接口调用过程,如上所示 (3)读取 ...

  6. iOS 写入文件保存数据的方式

     在iOS开发过程中,不管是做什么应用,都会碰到数据保存的问题.将数据保存到本地,能够让程序的运行更加流畅,不会出现让人厌恶的菊花形状,使得用户体验更好.下面介绍一下数据保存的方式: 1.NSKeye ...

  7. ObjectOutputStream 追加写入读取错误 - 自己的实现方案

    本篇博客灵感来自http://blog.csdn.net/chenssy/article/details/13170015 问题描述.问题出现的原因.尝试解决办法,请参见鄙人上一编博客. 上一编文章解 ...

  8. ObjectOutputStream 追加写入读取错误

    摘自http://blog.csdn.net/mitkey/article/details/50274543 问题描述: 用类ObjectOutputStream向文件写读对象时,碰到一个问题:新建一 ...

  9. Java 通过 BufferReader 实现 文件 写入读取 示例

    package com.javatest.techzero.gui; import java.io.BufferedReader; import java.io.File; import java.i ...

随机推荐

  1. Lamda表达式使用

    public class Lambda { public static void main(String[] args) { Lambda lambda=new Lambda(); String so ...

  2. UVA2037

    #include<cstdio> int Sum(int n) { int sum=0; while(n!=0) { sum+=n%10; n/=10; } return sum; } v ...

  3. 让wego微购购物分享系统采集拍拍数据功能之腾讯paipai功能采集插件

    wego是一款很不错的导购系统,无论前后台设计风格和功能都还不错,可有时我们的确需要一些自定义的功能,毕竟万千世界,大家都做一样的东西,采集同样的数据,能不烦吗?哈哈,今天就奉献上一个wego拍拍采集 ...

  4. OOM解决方案

    应用程序OOM异常永远都是值得关注的问题.通常这一块也是程序这中的重点之一 首先,OOM就是内存溢出,即Out Of Memory.也就是说内存占有量超过了VM所分配的最大. 怎么解决OOM,通常OO ...

  5. jBPM4&period;3&plus;ssh&plus;会签 整合配置及完整实例

    大佬们的项目里有用到会签,所以趁双休日研究了下. 其实也是简单的会签情况,不过开始的时候研究了4.4,(因为先前研究的都是4.4),发现4.4跟4.3的处理方法完全不一样,搞的我比较郁闷……弄了一天, ...

  6. Linux学习之守护进程详解

    Linux系统守护进程详解                                                              ---转自:http://yuanbin.blog ...

  7. window 7 改变窗口颜色

    对于刚刚重新安装的window7系统的盆友来说,不能改变窗口的颜色,和别人的window7窗口颜色和样子不一样和不好玩,那么我教大家,如何更改窗口颜色. 首先,重装的系统用软件激活之后,肯定还没还得急 ...

  8. HTML5和CSS3

    一.HTML5 HTML5 是 HTML 标准的最新演进版本. 这个术语代表了两个不同的概念:它是一个新的 HTML 语言版本包含了新的元素,属性和行为,同时包含了一系列可以被用来让 Web 站点和应 ...

  9. 安卓笔记--intent传值不更新问题

    今天在学习安卓的过程中,遇到一个问题,就是用intent进行多次传值的话, 他永远是第一次的值 后来发现,intent接收数据被写到了onCreat();方法中,这时候finish();到上一个Act ...

  10. js内存深入学习(一)

    一. 内存空间储存 某些情况下,调用堆栈中函数调用的数量超出了调用堆栈的实际大小,浏览器会抛出一个错误终止运行.这个就涉及到内存问题了. 1. 数据结构类型 栈: 后进先出(LIFO)的数据结构  堆 ...