我想使用wget在3个不同的位置下载多个文件,例如www.google.com,yahoo.com和gmail.com。我该怎么办呢?请帮帮我......
我通过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();
这不起作用。想知道是否有任何使用wget下载多个文件的方法..
答案 0 :(得分:2)
如果您只是谈论从不同位置检索每个文件,但仍然按顺序执行,则只需将wget
命令中的URI更改为指向其他位置。
如果您想要并发下载而不是顺序下载,则必须启动三个单独的进程,并让它们各自下载一个文件。这些ptocesses可以并行运行,但我可能只考虑大文件(其中可能没有XML文件)。
如果您遇到让命令运行的麻烦,我要做的第一件事就是抛弃cmd.exe
及其标准输入。您没有理由不能直接运行流程wget
。或者,如果您真的只想启动一个进程,则可以将它们输出到临时文件并使用单个进程cmd /c tempfile.cmd
来运行它。
但是,可能存在一个完全不同的问题,与您展示的内容无关,因为具有三个echo
语句的确切代码代替了您的{{1运行正常,生成正确的输出,至少在Visual C#Express 2010中。
事实上,一旦我将GnuWin32 wget
放到路径上,以下工作也可以,从网上获取真实文档并将它们放在我的顶级目录中:
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();
}
}
}
版本,GnuWin32或CygWin。
现在,正如您在其中一条评论中所说的那样,对于较大的文件,事情会变得有趣。如果我将所有三个URI更改为wget
,一个12,889,103字节的文件,则上面的代码大约占首次下载的18%(大约是2.3M标记)。
但是,如果我更改命令以使它们最后有http://download.microsoft.com/download/5/F/C/5FC4F80C-242D-423B-9A11-9510A013152D/Dolphins.themepack
,则下载会毫无问题地进行,因此我怀疑它很可能是>nul: 2>nul:
写入其输出的方式的问题(没有换行符)。如果你不在输出和错误流上使用重定向,它也可以完全运行,这加强了这个断言。
答案 1 :(得分:0)
嗯,首先,你在Windows上。 wget是GNU操作系统的一部分。除非你为Windows安装了wget的“克隆”,否则这是不可能的。您可能最好自己下载页面,例如HTTPClient class。
但是如果你安装了一种wget形式,那么什么不起作用?你希望它如何运作?你的问题不是很详细,你只是问问如何去做,并提供一个看似很好的解决方案。