2014-07-05 4 views
0

cmd.exe에 ftp 명령을 입력하는 C# 프로그램을 만들었습니다. 출력을 읽고 콘솔에 표시합니다. 문제는 Console.WriteLine (srFTP.ReadToEnd())의 출력을 읽을 때 멈추는 것입니다. 디버거는 오류를 표시하지 않습니다. 그것은 단순히 붙어 있습니다. 각 줄에 console.writelines를 두어 보았습니다. 그리고 그 지점에서 멈추었다는 것을 증명했습니다. 도움? 스트림 끝에라도 유용 영구적으로 될 때까지cmd.exe 출력을 C 프로그램으로 리디렉션 할 수 없습니다.

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

오류가 발생하면 프로그램에 데드락이 발생하므로 stderr를 읽지 않습니다. –

답변

0

ReadToEnd 읽기 계속됩니다, 즉, 응용 프로그램은 실제로 (보통 때 응용 프로그램 종료를 발생) 표준 출력 스트림을 폐쇄했다. 당신은 그 시점에 도달하지 못했습니다 - 당신이 한 모든 것은 로그인하는 것입니다.

ReadLine을 사용해야 만하고 필요할 때 언제 라인을 파싱해야하는지 알 수 있습니다. 앱에 더 많은 정보를 보냅니다. (또는 관리되는 코드를 사용하여 대화 형 명령 줄 앱으로 포팅하는 대신 FTP 작업을 수행하십시오.)