尝试遍历直接下载链接列表;第一个文件下载但第二个文件停留在 0 字节并且永远不会完成 (C#)

Attempting to loop through a list of direct download links; first file downloads but second gets stuck at 0 bytes and never finishes (C#)

我正在尝试使用下面的代码运行 通过直接下载列表 link。代码 运行s 并很好地下载了第一个文件,因为它移动到第二个文件(列表中的第二个 link),它正确地创建了新文件并开始下载,但在 0 字节处停止并且不会继续。

我已经尝试 运行 通过断点和类似方法,所有数据看起来都是正确的。此外,我还确认可以从相关网站快速连续下载多个文件而不会出现任何问题。

如有任何帮助、反馈或建议,我们将不胜感激!

foreach (string s in links)
        {
            using (WebClient w = new WebClient())
            {
                try
                {
                    Console.WriteLine("Attempting to download " + s);
                    w.OpenRead(s);

                    string content = w.ResponseHeaders["Content-Disposition"];
                    string filename = new ContentDisposition(content).FileName;

                    w.DownloadFile(new Uri(s), _directory + filename);
                    Console.WriteLine("Downloaded " + filename);
                }
                catch(WebException e)
                {
                    Console.WriteLine(e.Message);
                }
            }
        }

此外,直接下载,即使用下面的方法,效果很好。

using (WebClient w = new WebClient())
        {
            w.DownloadFile(new Uri(downloadLinks[0]), _directory + "test");
            w.DownloadFile(new Uri(downloadLinks[1]), _directory + "test1");
            w.DownloadFile(new Uri(downloadLinks[2]), _directory + "test2");
            w.DownloadFile(new Uri(downloadLinks[3]), _directory + "test3");
        }

谢谢!

我怀疑问题出在这一行:

w.OpenRead(s);

这将返回一个您永远不会关闭的 Stream。现在您 可以 关闭它...但最好还是使用它,而不是打扰 DownloadFile 调用:

using (Stream responseStream = w.OpenRead(s))
{
    string content = w.ResponseHeaders["Content-Disposition"];
    string filename = new ContentDisposition(content).FileName;
    using (Stream fileStream = File.Create(filename))
    {
        responseStream.CopyTo(fileStream);
    }
    Console.WriteLine("Downloaded " + filename);
}