Я выполняю команду ftp.exe через тип C # System.Diagnostics.Process. И я использую следующий код, чтобы получить вывод «ftp.exe» после того, как программно ввел команду «help». Но я могу получить только первую строчку результата. И я никогда не доберусь до «конечной» выходной части. Вся программа кажется заблокированной.
Process p = new Process();
p.StartInfo.FileName = @"C:\Windows\System32\ftp.exe";
p.StartInfo.CreateNoWindow = true;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.UseShellExecute = false;
p.Start();
p.StandardInput.WriteLine("help");
Int32 c_int = p.StandardOutput.Read();
while (c_int != -1)
{
Char c = (Char)c_int;
Console.Write(c);
c_int = p.StandardOutput.Read();
}
Console.WriteLine("end");
Однако я пишу простую программу, которая использует только Console.Writeline () для записи некоторого вывода в свой поток StdOut. И я проверяю это с помощью приведенного выше кода. Работает нормально. Я просто не могу понять, почему приведенный выше код не может работать с ftp.exe? Единственная разница между моей программой SimpleConsoleOutput и "ftp.exe" заключается в том, что у ftp.exe есть собственная интерактивная командная строка.
(--------------- Новый прогресс -----------------)
Вот мой прогресс в личном расследовании.
Я пишу 2 потока для записи в StdIn и читаю из StdOut «ftp.exe», и вывод выглядит так:
Commands may be abbreviated. Commands are:
Commands may be abbreviated. Commands are:
Commands may be abbreviated. Commands are:
....(exactly 16 times of above lines and then exactly 16 times of the following cmds list)
! delete literal prompt send
? debug ls put status
append dir mdelete pwd trace
...
и список последних команд даже не завершен.
Кажется, что вывод справочной команды разделен на две части.
1-я часть:
Commands may be abbreviated. Commands are:
2-я часть:
! delete literal prompt send
? debug ls put status
append dir mdelete pwd trace
...
И все 1-ые части записываются в поток StdOut "ftp.exe" перед всеми 2-ыми частями.
Как это может быть ?? Спасибо за ваши комментарии.
Я тестировал с другой командой "ftp.exe", и это выглядит нормально, кроме команды "help"