コード例 #1
0
ファイル: cGatherWeb.cs プロジェクト: Pinkuburu/soukeygetdata
        //下载文件,是一个单线程的方法,适用于小文件下载,仅支持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);
            }
        }
コード例 #2
0
        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");
                }
            }
                                         ));
        }