gpt4 book ai didi

c# - 使用 WebClient 下载 torrent 文件,导致文件损坏

转载 作者:行者123 更新时间:2023-11-30 15:04:43 30 4
gpt4 key购买 nike

我正在尝试在我的 .NET 应用程序中下载 .torrent 文件(不是 torrent 本身的内容)。

使用以下代码适用于其他文件,但不适用于 .torrent。生成的文件比我通过浏览器下载文件小 1-3kb。在 Torrent 客户端中打开它时,它说 Torrent 已损坏。

WebClient web = new WebClient();
web.Headers.Add("Content-Type", "application/x-bittorrent");
web.DownloadFile("http://kat.ph/torrents/linux-mint-12-gnome-mate-dvd-64-bit-t6008958/", "test.torrent");

在浏览器中打开 URL 会导致文件被正确下载。

关于为什么会发生这种情况的任何想法? WebClient 是否有任何好的替代方案可以正确下载文件?

编辑:我试过这个和 WebClient,结果是一样的:

private void DownloadFile(string url, string file)
{
byte[] result;
byte[] buffer = new byte[4096];

WebRequest wr = WebRequest.Create(url);
wr.ContentType = "application/x-bittorrent";
using (WebResponse response = wr.GetResponse())
{
using (Stream responseStream = response.GetResponseStream())
{
using (MemoryStream memoryStream = new MemoryStream())
{
int count = 0;
do
{
count = responseStream.Read(buffer, 0, buffer.Length);
memoryStream.Write(buffer, 0, count);

} while (count != 0);

result = memoryStream.ToArray();

using (BinaryWriter writer = new BinaryWriter(new FileStream(file, FileMode.Create)))
{
writer.Write(result);
}
}
}
}
}

最佳答案

服务器返回被gzip压缩后的内容,你下载这个压缩后的内容到文件的问题。对于这种情况,您应该检查“Content-Encoding” header 并使用适当的流阅读器来解压缩源。我修改了你的函数来处理 gzipped 内容:

private void DownloadFile(string url, string file)
{
byte[] result;
byte[] buffer = new byte[4096];

WebRequest wr = WebRequest.Create(url);
wr.ContentType = "application/x-bittorrent";
using (WebResponse response = wr.GetResponse())
{
bool gzip = response.Headers["Content-Encoding"] == "gzip";
var responseStream = gzip
? new GZipStream(response.GetResponseStream(), CompressionMode.Decompress)
: response.GetResponseStream();

using (MemoryStream memoryStream = new MemoryStream())
{
int count = 0;
do
{
count = responseStream.Read(buffer, 0, buffer.Length);
memoryStream.Write(buffer, 0, count);
} while (count != 0);

result = memoryStream.ToArray();

using (BinaryWriter writer = new BinaryWriter(new FileStream(file, FileMode.Create)))
{
writer.Write(result);
}
}
}
}

关于c# - 使用 WebClient 下载 torrent 文件,导致文件损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9857709/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com