[C#]使用Process的StandardInput与StandardOutput写入读取控制台数据
本文为原创文章、源代码为原创代码,如转载/复制,请在网页/代码处明显位置标明原文名称、作者及网址,谢谢!
开发工具: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读回数据,这里使用了重定向技术,运行结果如下:
我们可以看到,原来是Test.exe的程序,所有的数据操作都进行了重定向,直接在MainConsoleApp.exe进行了输入输出。
这个技术不仅仅可以用于以上的示例,还可以用于其他具有控制台输入输出的程序,如cmd.exe,这里不进行举例,自己进行试验即可。
我的博客即将同步至腾讯云+社区,邀请大家一同入驻。
[C#]使用Process的StandardInput与StandardOutput写入读取控制台数据的更多相关文章
- net快速写入/读取大量数据Postgresql
Postgresql快速写入/读取大量数据 http://www.cnblogs.com/podolski/p/7152144.html 环境及测试 使用.net驱动npgsql连接post数据库.配 ...
- Postgresql快速写入/读取大量数据(.net)
环境及测试 使用.net驱动npgsql连接post数据库.配置:win10 x64, i5-4590, 16G DDR3, SSD 850EVO. postgresql 9.6.3,数据库与数据都安 ...
- SharedPreferences写入和读出数据
Android中有很多方法存储数据,如SharedPreferences.SQLite数据库等.简单数据的存储适用SharedPreferences. 本文使用SharedPreferences写入和 ...
- [原创]PostgreSQL Plus Advanced Server批量创建分区表写入亿级别数据实例
当前情况:大表的数据量已接近2亿条我的解决思路:为它创建n*100个分区表,将各个分区表放在不同的tablespace上这样做的优点:1.首先是对这个级别的数据表的性能会有所提升2.数据管理更科学3. ...
- JXL读取写入excel表格数据
问题描述: 使用java的jxl包创建.写入excel表格数据 问题解决: (1)说明 (2)写入execel数据 注: 以上是写入数据需要调用的函数接口 注: 具体接口调用过程,如上所示 (3)读取 ...
- iOS 写入文件保存数据的方式
在iOS开发过程中,不管是做什么应用,都会碰到数据保存的问题.将数据保存到本地,能够让程序的运行更加流畅,不会出现让人厌恶的菊花形状,使得用户体验更好.下面介绍一下数据保存的方式: 1.NSKeye ...
- ObjectOutputStream 追加写入读取错误 - 自己的实现方案
本篇博客灵感来自http://blog.csdn.net/chenssy/article/details/13170015 问题描述.问题出现的原因.尝试解决办法,请参见鄙人上一编博客. 上一编文章解 ...
- ObjectOutputStream 追加写入读取错误
摘自http://blog.csdn.net/mitkey/article/details/50274543 问题描述: 用类ObjectOutputStream向文件写读对象时,碰到一个问题:新建一 ...
- Java 通过 BufferReader 实现 文件 写入读取 示例
package com.javatest.techzero.gui; import java.io.BufferedReader; import java.io.File; import java.i ...
随机推荐
- php mysqli MySQL server has gone away 问题分析
结论 mysqli没有处理对端(MySQL server)的断开请求.在send时,收到对端(MySQL server)的RST,会打印MySQL server has gone away. 环境 x ...
- web项目生成war包的问题
今天面试一家公司,问我生成war包的命令是什么? 当时没明白,就说自己用的eclipse直接右键 export --->war 完了重启tomcat(第一种) 好久没用maven了.回来一查才明 ...
- MySQL复制之理论篇
一.MySQL复制概述 MySQL支持两种复制方式:基于行的复制和基于语句的复制(逻辑复制).这两种方式都是通过在主库上记录 二进制日志.在备库重放日志的方式来实现异步的数据复制,其工作原理如下图: ...
- Asp.net Api中使用OAuth2.0实现“客户端验证”
一.实现继承自OAuthAuthorizationServerProvider的类,实现以"客户端验证"方式传入的相关认证和access_token发放. public class ...
- hdu 6215 -- Brute Force Sorting(双向链表+队列)
题目链接 Problem Description Beerus needs to sort an array of N integers. Algorithms are not Beerus's st ...
- 4本相见恨晚的Linux入门书籍
有读者问可否推荐一些 Linux 入门书籍,刚好在知乎也看到类似的问题,几个零碎的命令难以在 Linux 环境中存活,如果要真正形成自己的知识体系,还是要靠阅读专业书籍来积累.Linux 对后端开发是 ...
- zabbix 2.2.20 安装详解(Centos6.9)
环境说明 [root@centos ~]# cat /etc/redhat-release CentOS release 6.9 (Final) [root@centos ~]# uname -a L ...
- 用iptables 做NAT代理上网
背景:有一台A服务器不能上网,和B服务器通过内网来连接,B服务器可以上网,要实现A服务器也可以上网. 内网主机: A eth1:172.16.1.8 外网主机: B eth0:10.0.0.61外网主 ...
- dom4j解析xml文档全面介绍
一.dom4j介绍 dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个非常非常优秀的Java XML API,具有性能优异.功能强大和极端易用使用的特点, ...
- 【转载】以Java的视角来聊聊SQL注入
以Java的视角来聊聊SQL注入 原创 2017-08-08 javatiku Java面试那些事儿 在大二就接触过sql注入,之前一直在学习windows逆向技术,认为web安全以后不是自己的从业方 ...