Wykonuję ftd ftp.exe poprzez typ C# System.Diagnostics.Process. I używam następującego kodu, aby uzyskać wyjście "ftp.exe" po tym, jak programowo wprowadzę polecenie "help". Ale mogę uzyskać tylko pierwszą linię wyniku. I nigdy nie dostaję się do części wyjściowej "koniec". Cały program wydaje się zablokowany.Dlaczego nie mogę uzyskać danych wyjściowych pliku ftp.exe według kodu?
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");
jednak napisać prosty program, który tylko używać Console.WriteLine(), aby napisać kilka wyjścia do jej strumienia stdout. I testuję to z powyższym kodem. To działa dobrze. Po prostu nie mogę zrozumieć, dlaczego powyższy kod nie działa z ftp.exe? Jedyną różnicą między moim programem SimpleConsoleOutput a "ftp.exe" jest to, że ftp.exe ma własny interaktywny wiersz polecenia.
(New Progress --------------- -----------------)
Here're jakiś postęp moje osobiste dochodzenie.
napisać 2 posty pisać do standardowego wejścia i odczytywanych z stdout „ftp.exe”, a wyjście jest tak:
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
...
i ostatnia lista poleceń nie jest jeszcze zakończona.
Wydaje się, że wyjście polecenia help jest podzielony na dwie części.
The 1st część jest:
Commands may be abbreviated. Commands are:
The 2nd część jest:
! delete literal prompt send
? debug ls put status
append dir mdelete pwd trace
...
I wszystkie 1st części są wrtten do strumienia stdout "ftp.exe" przed wszystkimi 2. części . Jak to jest? Dzięki za twoje komentarze.
testowałem z innym dowództwem „ftp.exe” i wydaje się normalne, z wyjątkiem polecenia „Pomoc”
prostu z odsetek, dlaczego jesteś tak zainteresowany wyjściu ftp.exe jeśli nie zamierzasz go używać? – CResults
Witam, CResults. Prowadzę badania dotyczące standardowych strumieni aplikacji konsolowych. A ftp.exe jest jednym z moich celów eksperymentalnych. – smwikipedia