2013-05-09 17 views
0

我想下載多個文件說www.google.com,yahoo.com或gmail.com在使用wget 3個不同位置。我應該如何去做呢?請幫我..使用wget命令下載多個文件在不同的位置

我通過C#做的這一切:

 ProcessStartInfo startInfo = new ProcessStartInfo("CMD.exe"); 
     Process p = new Process(); 
     startInfo.RedirectStandardInput = true; 
     startInfo.UseShellExecute = false; 
     startInfo.RedirectStandardOutput = true; 
     startInfo.RedirectStandardError = true; 
     p = Process.Start(startInfo); 

     p.StandardInput.WriteLine(@"wget --output-document=C:\1.xml xyz.com/a.xml"); 
     p.StandardInput.WriteLine(@"wget --output-document=C:\2.xml xyz.com/b.xml"); 
     p.StandardInput.WriteLine(@"wget --output-document=C:\3.xml xyz.com/c.xml"); 

     p.StandardInput.WriteLine(@"EXIT"); 
     string output = p.StandardOutput.ReadToEnd(); 
     string error = p.StandardError.ReadToEnd(); 
     p.WaitForExit(); 
     p.Close(); 

這是行不通的。想知道是否有[R使用wget下載多個文件的任何方式行吟詩人..

+0

它是如何「不工作」? – paxdiablo 2013-05-09 06:11:11

回答

2

如果你只是在談論從不同的位置檢索每個文件,但仍連續做它,你只需要改變的URI的wget命令指向不同的位置。

如果你想同時下載,而不是順序,你將不得不啓動三個獨立的進程,並讓他們每個下載一個文件。這些ptocesses可以並排運行,但我可能只考慮這個大文件(其中的XML文件可能不是)。

如果您在運行命令時遇到麻煩,我會做的第一件事是溝通cmd.exe及其標準輸入。沒有理由不能直接運行wget。或者,如果你真的只需要啓動一個過程,你可以將它們輸出到一個臨時文件,並使用一個單一的過程cmd /c tempfile.cmd運行它。


但是,有可能是一個完全不同的您遇到無關,你已經證明什麼,因爲在地方你wget那些三個echo陳述,確切的代碼運行正常問題,產生正確的輸出,至少在Visual C#Express 2010.

而事實上,一旦我將我的GnuWin32 wget放在路徑上,下面的工作也是如此,從網上獲取真正的文檔並將它們放在我的頂層目錄:

using System; 
using System.Diagnostics; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      ProcessStartInfo startInfo = new ProcessStartInfo("cmd.exe"); 
      Process p = new Process(); 
      startInfo.RedirectStandardInput = true; 
      startInfo.UseShellExecute = false; 
      startInfo.RedirectStandardOutput = true; 
      startInfo.RedirectStandardError = true; 
      p = Process.Start(startInfo); 

      p.StandardInput.WriteLine(
       @"wget --output-document=c:\q1.txt http://www.ibm.com"); 
      p.StandardInput.WriteLine(
       @"wget --output-document=c:\q2.txt http://www.microsoft.com"); 
      p.StandardInput.WriteLine(
       @"wget --output-document=c:\q3.txt http://www.borland.com"); 

      p.StandardInput.WriteLine(@"exit"); 

      string output = p.StandardOutput.ReadToEnd(); 
      string error = p.StandardError.ReadToEnd(); 
      p.WaitForExit(); 
      p.Close(); 
     } 
    } 
} 

這裏的證明,通過微軟下載中途單一窗口:

enter image description here

因此,底線,你已經證明我們通過上面的圖片證明並非天生就是不可行的。我唯一的建議是開始在其他事情如wget版本您正在使用,而GnuWin32或CygWin的四處尋找。


現在,如果您在其中一條評論中說過,文件會變得很有趣。如果我將所有三個URI都更改爲http://download.microsoft.com/download/5/F/C/5FC4F80C-242D-423B-9A11-9510A013152D/Dolphins.themepack(文件長度爲12,889,103字節),則上面的代碼佔第一次下載的大約18%(約2.3M大關)。但是,如果我更改了命令以使它們在末尾有>nul: 2>nul:,則下載過程沒有問題,所以我懷疑這很可能是wget寫入其輸出(不帶換行符)的方式的問題。如果您不在輸出和錯誤流上使用重定向,這會加強該斷言,它也可以完全正常工作。

+0

是否可以順序下載文件而不是啓動3個進程? – Arti 2013-05-09 06:11:38

+0

@ user1650891,是的,只要按順序完成每個進程,就像開始進程一樣,等待它結束),假設您一次只能指定一個進程。將它重構成函數將是有利的。如果您的意思是一個進程而不考慮併發性,那麼將所有命令放入'x.cmd'文件並在一個進程中運行'cmd/c x.cmd'。 – paxdiablo 2013-05-09 06:15:19

+0

上面的例子工作正常,如果我下載1個文件..所以我知道,開始一個過程是不是一個問題.. – Arti 2013-05-09 06:18:53

0

嗯,首先,你是在Windows上。 wget是GNU操作系統的一部分。除非你爲Windows安裝了wget的「克隆」,否則這是不可能的。您可能更適合自己下載頁面,例如HTTPClient class

但是,如果您安裝了wget的一種形式,哪些不起作用?你想如何工作?你的問題不是很詳細,你只是問如何去做,並提供一個看似很好的解決方案。

+0

我hv在服務器上安裝了wget,它正在爲一個文件下載工作.. – Arti 2013-05-09 06:14:36

+0

好吧,這是一個開始。嘗試在用於下載的三行之間向控制檯寫入內容,並查看它是否已經過去。 – Anickyan 2013-05-09 06:23:53