如何重定向cmd ftp ls命令输出到一个C#变量 [英] How do I redirect cmd ftp ls command output to a C# variable

查看:274
本文介绍了如何重定向cmd ftp ls命令输出到一个C#变量的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在想这个数小时,似乎找不到一个直接的答案。我发现了类似的问题,但没有一个似乎与我想在这里做的工作。我试图避免写入文件。如果我可以重定向到一个变量,这将是巨大的。

I have been trying to figure this for hours, and can't seem to find a straight answer. I have found similar questions but none seem to work with what I am trying to do here. I am trying to avoid having to write to a file. If I can redirect to a variable, that would be great.

给定以下代码:

        static void Main(string[] args) {

        const int VK_RETURN = 0x0D;
        const int WM_KEYDOWN = 0x100;

        var cmd = new Process();

        cmd.StartInfo.FileName = "cmd.exe";
        cmd.StartInfo.UseShellExecute = false;
        cmd.StartInfo.RedirectStandardInput = true;
        cmd.StartInfo.RedirectStandardOutput = true;
        cmd.Start();

        using (var stdin = cmd.StandardInput) {
            stdin.WriteLine("ftp");
            stdin.WriteLine("open localhost");
            stdin.WriteLine("anonymous");
            var hWnd = System.Diagnostics.Process.GetCurrentProcess().MainWindowHandle;
            PostMessage(hWnd, WM_KEYDOWN, VK_RETURN, 0);
            stdin.WriteLine("ls");
            stdin.WriteLine("close localhost");
            stdin.WriteLine("bye");

        }
        cmd.WaitForExit();
        cmd.Close();
    }

如何将ls输出重定向到变量?

How do I redirect the ls output to a variable?

推荐答案

我能够通过处理OutputDataReceived事件从控制台获取输出。 https:// msdn。 microsoft.com/en-us/library/system.diagnostics.process.outputdatareceived(v=vs.110).aspx

I was able to grab output from the console by handling the OutputDataReceived event. https://msdn.microsoft.com/en-us/library/system.diagnostics.process.outputdatareceived(v=vs.110).aspx

using System;
using System.Diagnostics;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace UnitTestProject1
{
    [TestClass]
    public class UnitTest1
    {
        [TestMethod]
        public void TestMethod1()
        {
            const int VK_RETURN = 0x0D;
            const int WM_KEYDOWN = 0x100;

            var cmd = new Process();

            cmd.StartInfo.FileName = "cmd.exe";
            cmd.StartInfo.UseShellExecute = false;
            cmd.StartInfo.RedirectStandardInput = true;
            cmd.StartInfo.RedirectStandardOutput = true;

            // Capture output
            cmd.OutputDataReceived += (sender, args) =>
            {
                if (string.IsNullOrEmpty(args.Data) == false)
                {
                    var x = args.Data;
                }
            };

            cmd.Start();
            // Need to call this method in order to raise the OutputDataReceivedEvent for each line of output
            cmd.BeginOutputReadLine();


            using (var stdin = cmd.StandardInput)
            {
                stdin.WriteLine("ftp");
                stdin.WriteLine("open localhost");
                stdin.WriteLine("anonymous");
                var hWnd = Process.GetCurrentProcess().MainWindowHandle;
                PostMessage(hWnd, WM_KEYDOWN, VK_RETURN, 0);
                stdin.WriteLine("ls");
                stdin.WriteLine("close localhost");
                stdin.WriteLine("bye");
            }
            cmd.WaitForExit();
            cmd.Close();
        }

        private void PostMessage(IntPtr hWnd, int wmKeydown, int vkReturn, int i)
        {
            // No idea what you are doing here
        }
    }
}

这篇关于如何重定向cmd ftp ls命令输出到一个C#变量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆