无法将cmd.exe输出重定向到程序C#

时间:2014-07-05 16:26:54

标签: c# ftp cmd output-redirect

我制作了一个C#程序,它将ftp命令输入cmd.exe,它会读取输出并在控制台上显示它。问题是,它在读取Console.WriteLine(srFTP.ReadToEnd())的输出时会卡住;调试器不显示任何错误。它只会卡住。我尝试在每一行上放置console.writelines,它证明它在那一点上卡住了。帮助

    public static void CheckKVSConnect()
    {
        Process KVSFTP = new Process();
        KVSFTP.StartInfo.FileName = "cmd.exe";
        KVSFTP.StartInfo.Arguments = "disable";
        KVSFTP.StartInfo.UseShellExecute = false;
        KVSFTP.StartInfo.RedirectStandardOutput = true;
        KVSFTP.StartInfo.RedirectStandardInput = true;
        KVSFTP.StartInfo.RedirectStandardError = true;
        KVSFTP.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
        KVSFTP.Start();
        StreamWriter swFTP = KVSFTP.StandardInput;
        swFTP.WriteLine("ftp");
        swFTP.WriteLine("open aaaaaa.org");
        swFTP.WriteLine("username");
        swFTP.WriteLine("password");
        StreamReader srFTP = KVSFTP.StandardOutput;
        Console.WriteLine(srFTP.ReadToEnd());
        Console.WriteLine("DONE");
    }

1 个答案:

答案 0 :(得分:0)

ReadToEnd将继续阅读,直到流可以证明并永久地结束,即应用程序实际上已关闭其标准输出流(通常仅在应用程序退出时发生)。你还没有达到这一点 - 你所做的只是登录。

您将不得不使用ReadLine,并解析这些行以确定您何时到达需要向应用发送更多输入的点。 (或使用托管代码执行FTP操作,而不是外壳到交互式命令行应用程序。)