//下载文件,是一个单线程的方法,适用于小文件下载,仅支持http方式 private cGlobalParas.DownloadResult DownloadFile(string url, string path) { HttpWebRequest wReq = null; HttpWebResponse wRep = null; FileStream SaveFileStream = null; int startingPoint = 0; try { //For using untrusted SSL Certificates wReq = (HttpWebRequest)HttpWebRequest.Create(url); wReq.AddRange(startingPoint); wRep = (HttpWebResponse)wReq.GetResponse(); Stream responseSteam = wRep.GetResponseStream(); if (startingPoint == 0) { SaveFileStream = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.ReadWrite); } else { SaveFileStream = new FileStream(path, FileMode.Append, FileAccess.Write, FileShare.ReadWrite); } int bytesSize; long fileSize = wRep.ContentLength; byte[] downloadBuffer = new byte[DEF_PACKET_LENGTH]; while ((bytesSize = responseSteam.Read(downloadBuffer, 0, downloadBuffer.Length)) > 0) { SaveFileStream.Write(downloadBuffer, 0, bytesSize); } SaveFileStream.Close(); SaveFileStream.Dispose(); wRep.Close(); return(cGlobalParas.DownloadResult.Succeed); } catch (System.Exception) { return(cGlobalParas.DownloadResult.Err); } }
public Task ContentDownloader(string UrlName, string WhereToSave, string FileName, int LimitedBytes) { return(Task.Factory.StartNew(() => { try { long FileSize = 0; int BufferSize = LimitedBytes; long ExistFileSize = 0; FileStream SaveFileStream; if (CheckExistingUrl(UrlName) == false) { throw new InvalidDataException(); } /*Check if the file already exist*/ if (File.Exists(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), FileName))) { FileInfo FInfo = new FileInfo(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), FileName)); /* Recieve how much size was already downloaded */ ExistFileSize = FInfo.Length; } /* If we already have some content in that file, we need to created that file only in append mode and to attach the rest of the content there*/ if (ExistFileSize > 0) { SaveFileStream = new FileStream(Path.Combine(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), WhereToSave), FileName), FileMode.Append, FileAccess.Write, FileShare.ReadWrite); } /* If that file have size 0 means that is not created so we need to open that file in create mode and add that content*/ else { SaveFileStream = new FileStream(Path.Combine(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), WhereToSave), FileName), FileMode.Create, FileAccess.Write, FileShare.ReadWrite); } HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(UrlName); /* Add the content after the existing length */ request.AddRange((int)ExistFileSize); Stream ResponseStream; HttpWebResponse response = (HttpWebResponse)request.GetResponse(); ResponseStream = response.GetResponseStream(); FileSize = response.ContentLength; Console.WriteLine("We need to write " + FileSize + " bytes"); int Recieved; byte[] buffer = new byte[BufferSize]; int Sum = 0; while ((Recieved = ResponseStream.Read(buffer, 0, buffer.Length)) > 0) { SaveFileStream.Write(buffer, 0, Recieved); SaveFileStream.Flush(); Sum += Recieved; } if (Sum == FileSize) { Console.WriteLine("Successfully writed " + Sum + " bytes." + " File " + FileName + " was created"); } } catch { Console.WriteLine("Unsuccesffully writed file"); } } )); }