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(); }
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; }