我正在尝试从ncftpput.exe获取输出流,并能够异步操作流。 ncftpput.exe不会逐行打印它的流,而只是不断用新信息更新同一行(这可能是相关的)。它间歇性地工作 - 有时候我会收回信息,有时我不会。
基本上,有没有一种方法可以让我的流经常刷新,以更安全和规律的方式重定向?
这是我到目前为止所做的(我已经注释了它,摆脱了无关的无关信息,但这是本质):
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 :(得分:0)
最后我发现由于ncftpput.exe如何打印到控制台,因此无法从重定向的输出中获取足够的信息。所以我决定编写自己的FTP应用程序并使用它!这是一个比ncftpput.exe更简单的应用程序,但它完成了我需要它做的事情。我使用的是标准的.NET库,没什么特别的。