获取File not found-404错误后,如何停止Wget进程?

时间:2014-10-30 06:00:12

标签: c# process wget

我在c#中做一个应用程序,使用wget命令通过Url下载包含.jpeg和.j2k文件的文件夹。

为此我使用以下命令:

"wget -r -c -np --retry-connrefused --tries=0 http://url/folder1 -P E:\\Images --cut-dirs=2 -nH -A j2k -o E:\\Images\\error.log

使用此命令下载包含子文件夹的文件夹,其中包含j2k类型的图像,如果我用jpeg替换j2k类型,那么它将下载包含子文件夹的文件夹,其中包含类型为jpeg的图像(如果存在)。如果不存在,则仅显示空文件夹,并在error.log中显示找不到文件404错误。

如果我运行上面的命令并假设在该文件夹中只有jpeg文件没有j2k文件。然后在找到404错误的文件后,我想停止wget并再次想要启动wget文件类型.jpeg。我还有多个包含图像的子文件夹。因此,对于每个子文件夹,我想检查文件未找到错误。

为此我可以通过阅读日志文件来实现。但是每次都无法读取日志文件。它减缓了这个过程。此外,我只提供路径到父文件夹。此解决方案仅在找到第一个子文件夹的第一个404文件未找到错误后才起作用,如果在剩余文件夹中存在j2k文件仍然在第一个子文件夹404文件中未下载错误,则会下载jpeg文件。

我尝试使用Process.ErrorDataReceived,但仍然没有取得成功。 代码如下。

public void Start()
       {   
            try
            {                          
                Process process = new Process();
                process.StartInfo.FileName = "path of wget.exe";
                process.StartInfo.Arguments = "wget -r -c -np --retry-connrefused --tries=0 http://url/folder1 -P E:\\Images --cut-dirs=2 -nH -A j2k -o E:\\Images\\error.log";
                process.EnableRaisingEvents = false;
                process.StartInfo.UseShellExecute = false;
                process.StartInfo.RedirectStandardError = true;
                process.StartInfo.WindowStyle = ProcessWindowStyle.Hide;
                process.ErrorDataReceived += new DataReceivedEventHandler(ProcessErrorDataRecieved);
                process.Start()
                process.BeginErrorReadLine();                   
                process.WaitForExit();                       
            }
            catch (Exception ex)
            {
                /////                
            }
        }
        private void ProcessErrorDataRecieved(object sender, DataReceivedEventArgs e)
        {
            MessageBox.Show(e.Data);

        }

在上面的情况下,j2k不存在然后进程被终止并且在日志文件“找不到文件错误”中。但是错误没有通过errordatarecieved获取陷阱.e.data总是显示为null。(process.ExitCode即将到来)零总是。)

那么如何仅使用Process类来捕获错误?

感谢任何帮助。

0 个答案:

没有答案