[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,這里不進行舉例,自己進行試驗即可。


 我的博客即將同步至騰訊雲+社區,邀請大家一同入駐。


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM