我制作了一个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");
}
答案 0 :(得分:0)
ReadToEnd
将继续阅读,直到流可以证明并永久地结束,即应用程序实际上已关闭其标准输出流(通常仅在应用程序退出时发生)。你还没有达到这一点 - 你所做的只是登录。
您将不得不使用ReadLine
,并解析这些行以确定您何时到达需要向应用发送更多输入的点。 (或使用托管代码执行FTP操作,而不是外壳到交互式命令行应用程序。)