2013-04-09 3 views
0

Я пытаюсь получить поток вывода из ncftpput.exe и иметь возможность управлять потоком асинхронно. ncftpput.exe не печатает поток по очереди, вместо этого он просто обновляет ту же строку с новой информацией (это может быть актуально). Он работает прерывисто - иногда я получаю информацию обратно, иногда я этого не делаю.Ошибка/ошибка выхода из ncftpput.exe

По существу, есть способ, которым я могу получить поток, который обновляет его частоту, чтобы перенаправить ее более безопасным и обычным способом?

Вот что у меня до сих пор (я аннотированный его, избавившись от irrelvant посторонней информации, но в этом суть):

class Program 
{ 
    static int main() 
    { 
     internal Process m_Tool { get; set; } 
     internal ProcessStartInfo m_StartInfo { get; set; } 
     internal static string m_StandardData { get; set; } 
     internal static string m_ErrorData { get; set; } 

     m_Tool = new Process(); 
     m_StartInfo = new ProcessStartInfo(); 
     m_StartInfo.FileName = @"C:\utils\ncftpput.exe"; 
     m_StartInfo.UseShellExecute = false; 
     m_StartInfo.RedirectStandardOutput = true; 
     m_StartInfo.RedirectStandardError = true; 
     m_StandardData = ""; 
     m_ErrorData = ""; 
     m_StartInfo.Arguments = /* Various starting args */ 
     m_Tool.StartInfo = m_StartInfo; 
     m_Tool.Start(); 

     string standardLine; 
     string errorLine; 

     try 
     { 
      m_Tool.OutputDataReceived += ProcessStandardDataHandler; 
      m_Tool.ErrorDataReceived += ProcessErrorDataHandler; 

      m_Tool.BeginErrorReadLine(); 
      m_Tool.BeginOutputReadLine(); 
     } 
     catch (Exception e) 
     { 
      Console.WriteLine(e.Message); 
     } 
     while (!m_Tool.HasExited) 
     { 
      System.Threading.Thread.Sleep(5000); 
      standardLine = m_StandardData; 
      errorLine = m_ErrorData; 
     } 
    } 
    private static void ProcessErrorDataHandler(object sendingProcess, DataReceivedEventArgs outLine) 
    { 

     if (!String.IsNullOrEmpty(outLine.Data)) 
     { 
      // Add the text to the collected output. 
      m_ErrorData = outLine.Data.ToString(); 
      m_DataReceived = true; 

     } 
    } 

    private static void ProcessStandardDataHandler(object sendingProcess, DataReceivedEventArgs outLine) 
    { 

     if (!String.IsNullOrEmpty(outLine.Data)) 
     { 
      // Add the text to the collected output. 
      m_StandardData = outLine.Data.ToString(); 
     } 
    } 
} 

Спасибо заранее !!

ответ

0

В конце концов я обнаружил, что из-за того, что ncftpput.exe напечатано на консоли, было невозможно получить достаточную информацию из перенаправленного вывода. Поэтому я решил написать свое собственное приложение FTP и использовать его! Это более простое приложение, чем ncftpput.exe, но оно делает то, что мне нужно. Я использовал стандартную библиотеку .NET, ничего особенного.

Смежные вопросы