gpt4 book ai didi

c# - 分段的 C# 文件下载器

转载 作者:太空狗 更新时间:2023-10-29 20:09:00 25 4
gpt4 key购买 nike

一直在尝试用 C# 编写一个程序,像大多数下载管理器一样使用多个段一次下载一个文件,但我遇到了下载的文件已损坏的问题。例如,我下载了一个视频,它播放了 2 秒钟,然后 WMP 说它无法播放。

我对下载的文件进行了十六进制编辑,文件中似乎散布着零字节部分,有人知道这是为什么吗? VS 报告没有错误。

getPart() 在单独的线程中为每个段调用。

public long start;
public long end;
public int thread;
public Form1 handle;
public myFile handler;
public void getPart()
{
log("getting part " + start.ToString() + "," + end.ToString());
HttpWebRequest part = (HttpWebRequest)WebRequest.Create(handler.url);
part.AddRange((int)start,(int) end);
HttpWebResponse pr = (HttpWebResponse)part.GetResponse();
Stream rstream = pr.GetResponseStream();
log("Beginning part " + start.ToString());
int totalbytes = 0;
byte[] buffer = new byte[256];
int x = rstream.Read(buffer, 0, 256);
while (x > 0)
{
handler.writeFile(buffer, (int)(totalbytes + start), x);
totalbytes += x;
x = rstream.Read(buffer, 0, 256);
}
log(start.ToString() + "-byte start part done...");
rstream.Close();
pr.Close();
handler.partDone(thread);
return;
}

public void writeFile(byte[] buffer, int start, int size)
{
mFileStream.Seek(start, SeekOrigin.Begin);
mFileStream.Write(buffer, 0, size);
return;
}

最佳答案

好吧,我已经弄明白了,只是想为遇到类似问题的任何人留下答案。文件写入流需要加锁。

public void writeFile(byte[] buffer, int start, int size)
{
mFileStream.Seek(start, SeekOrigin.Begin);
mFileStream.Write(buffer, 0, size);
return;
}

成为

public void writeFile(byte[] buffer, int start, int size)
{
lock (mFileStream)
{
mFileStream.Seek(start, SeekOrigin.Begin);
mFileStream.Write(buffer, 0, size);
return;
}
}

关于c# - 分段的 C# 文件下载器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1831279/

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