首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >分段C#文件下载器

分段C#文件下载器
EN

Stack Overflow用户
提问于 2009-12-02 15:52:13
回答 1查看 8.5K关注 0票数 7

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

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

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

代码语言:javascript
运行
复制
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;
}
EN

回答 1

Stack Overflow用户

发布于 2009-12-03 07:15:08

好吧,我已经弄明白了,只是想给有类似问题的人留下一个答案。文件写入流周围需要一个锁。

代码语言:javascript
运行
复制
public void writeFile(byte[] buffer, int start, int size)
    {
        mFileStream.Seek(start, SeekOrigin.Begin);
        mFileStream.Write(buffer, 0, size);
        return;
    }

变成了

代码语言:javascript
运行
复制
public void writeFile(byte[] buffer, int start, int size)
    {
        lock (mFileStream)
        {
        mFileStream.Seek(start, SeekOrigin.Begin);
        mFileStream.Write(buffer, 0, size);
        return;
        }
    }
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1831279

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档