Я выполняю ftp.exe cmd через C# System.Diagnostics.Process. И я использую следующий код, чтобы получить вывод «ftp.exe» после того, как я программным образом введите команду «help». Но я могу получить только первую строку результата. И я никогда не добираюсь до конечной выходной части. Вся программа кажется заблокированной.Почему я не могу получить вывод ftp.exe по коду?
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 имеет собственную интерактивную командную строку.
(--------------- Новый Progress -----------------)
Here're некоторый прогресс в мое личное расследование.
Я пишу 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-й части wrtten в поток STDOUT из «ftp.exe» перед всеми 2-й части , Как это может быть ?? Спасибо за ваши комментарии.
я тестировал с другой командой «ftp.exe», и это кажется нормальным, кроме команды «помощи»
Просто из интереса, почему вы так заинтересованы в выходе ftp.exe, если вы не собираетесь использовать его? – CResults
Привет, CResults. Я изучаю стандартные потоки консольных приложений. И ftp.exe - одна из моих целей эксперимента. – smwikipedia