日期:2014-05-18  浏览次数:20744 次

多线程下载文件请求偏移的问题
感谢大家抽出时间解决我这个问题,综述:
1、单线程下载测试OK;
2、多线程下载每个线程跟踪发现下的文件块【开始、结束】位置相同
3、多线程下载线程合并和文件合并OK,所以如果要下一个文本文件内容为:
  I'm a Programmer 得到的文本将为: I'm a PrI'm a Pr
/***********************文件分割***********************/
……省略,经检查和临时文件输出,发现无问题……
/***********************部分源码***********************/

/***********************块下载(每个线程中都要执行的部分)***********************/
((HttpWebRequest)_Request).AddRange((int)this.Start,(int)this.MaxSize+(int)this.Start-1);
mSourceStream = _Request.GetResponse().GetResponseStream();

byte[] buff = new byte[1024];
int currentSize = mSourceStream.Read(buff , 0 ,buff.Length);
while (mBytesFinished+currentSize <= this.MaxSize
&&currentSize>0)
{
TargetStream.Write(buff, 0, currentSize);
mBytesFinished += currentSize;
currentSize = mSourceStream.Read(buff , 0 ,buff.Length);

}
if (mBytesFinished+currentSize>this.MaxSize)
{
TargetStream.Write(buff, 0, (int)(this.MaxSize-mBytesFinished));
mBytesFinished += (this.MaxSize-mBytesFinished);
currentSize = mSourceStream.Read(buff , 0 ,buff.Length);
}
mRequest.Abort();
mFinished = true;
/***********************部分源码***********************/

/***********************合并***********************/
……无问题……
/***********************部分源码***********************/

提问:((HttpWebRequest)_Request).AddRange((int)this.Start,(int)this.MaxSize+(int)this.Start-1);
这句执行了请求的文件内容根本没有偏移,如何解决?


------解决方案--------------------
http://download.csdn.net/source/274988
下载看源码