示例#1
0
        private void ThreadableResumeDownload(string url)
        {
            if (_isFinished)
            {
                Error = new Exception("Before ThreadableResumeDownload Error!");
                return;
            }

            System.IO.FileStream downloadFileStream;
            //打开上次下载的文件或新建文件
            long lStartPos = 0;

            if (_useContinue && System.IO.File.Exists(TmpDownloadPath))
            {
                downloadFileStream = System.IO.File.OpenWrite(TmpDownloadPath);
                lStartPos          = downloadFileStream.Length;
                downloadFileStream.Seek(lStartPos, System.IO.SeekOrigin.Current); //移动文件流中的当前指针

                Log("Resume.... from {0}", lStartPos);
                //CDebug.LogConsole_MultiThread("Resume.... from {0}", lStartPos);
            }
            else
            {
                downloadFileStream = new System.IO.FileStream(TmpDownloadPath, System.IO.FileMode.OpenOrCreate);
                lStartPos          = 0;
            }

            Requester = new HttpRequester(Url, downloadFileStream, BufferSize);
            if (lStartPos > 0)
            {
                Requester.SetRequestRange(lStartPos);
            }

            Requester.BeforeReadAsyncHook = _requesterAsyncHook;
            Requester.SetFinishCallback(OnRequestFinish);

            Requester.SetStreamCallback((req) =>
            {
                if (_stepCallback != null)
                {
                    _stepCallback(this);
                }
            });
            Requester.Start();
        }
示例#2
0
        private void OnRequestFinish(HttpRequester req)
        {
            try
            {
                req.Dispose(); // 释放写入的Stream...进行移动操作
                Error = req.Error;

                if (IsError)
                {
                    Log("下载过程中出现错误:" + Error.ToString());
                    // 如果非断点续传模式,错误删掉临时文件
                    if (!_useContinue)
                    {
                        if (File.Exists(TmpDownloadPath))
                        {
                            File.Delete(TmpDownloadPath); // delete temporary file
                        }
                    }
                }
                else
                {
                    if (File.Exists(_saveFullPath))
                    {
                        File.Delete(_saveFullPath);
                    }
                    File.Move(TmpDownloadPath, _saveFullPath);
                }
            }
            catch (Exception e)
            {
                Error = e;
            }


            IsFinished = true;
        }