如何重定向cmd ftp ls命令输出到一个C#变量 [英] How do I redirect cmd ftp ls command output to a C# variable
问题描述
我一直在想这个数小时,似乎找不到一个直接的答案。我发现了类似的问题,但没有一个似乎与我想在这里做的工作。我试图避免写入文件。如果我可以重定向到一个变量,这将是巨大的。
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屋!