Exemple #1
0
        public static string GetFolderUrl(DownloadFileInfo file)
        {
            string folderPathUrl = string.Empty;
            string subDir        = Path.GetDirectoryName(file.FileFullName);

            if (!string.IsNullOrEmpty(subDir))
            {
                folderPathUrl = "\\" + subDir;
            }
            if (!Directory.Exists(SystemBinUrl + ConstFile.TEMPFOLDERNAME + folderPathUrl))
            {
                Directory.CreateDirectory(SystemBinUrl + ConstFile.TEMPFOLDERNAME + folderPathUrl);
            }
            return(folderPathUrl);
            //string folderPathUrl = string.Empty;
            //int folderPathPoint = file.DownloadUrl.IndexOf("/", 15) + 1;
            //string filepathstring = file.DownloadUrl.Substring(folderPathPoint);
            //int folderPathPoint1 = filepathstring.IndexOf("/");
            //string filepathstring1 = filepathstring.Substring(folderPathPoint1 + 1);
            //if (filepathstring1.IndexOf("/") != -1)
            //{
            //    string[] ExeGroup = filepathstring1.Split('/');
            //    for (int i = 0; i < ExeGroup.Length - 1; i++)
            //    {
            //        folderPathUrl += "\\" + ExeGroup[i];
            //    }
            //    if (!Directory.Exists(SystemBinUrl + ConstFile.TEMPFOLDERNAME + folderPathUrl))
            //    {
            //        Directory.CreateDirectory(SystemBinUrl + ConstFile.TEMPFOLDERNAME + folderPathUrl);
            //    }
            //}
            //return folderPathUrl;
        }
Exemple #2
0
        private void ProcDownload(object o)
        {
            string tempFolderPath = Path.Combine(CommonUnitity.SystemBinUrl, ConstFile.TEMPFOLDERNAME);

            if (!Directory.Exists(tempFolderPath))
            {
                Directory.CreateDirectory(tempFolderPath);
            }


            evtPerDonwload = new ManualResetEvent(false);

            foreach (DownloadFileInfo file in this.downloadFileList)
            {
                total += file.Size;
            }
            if (total > 0)
            {
                try
                {
                    while (!evtDownload.WaitOne(0, false))
                    {
                        if (this.downloadFileList.Count == 0)
                        {
                            break;
                        }

                        DownloadFileInfo file = this.downloadFileList[0];

                        //Debug.WriteLine(String.Format("Start Download:{0}", file.FileName));

                        this.ShowCurrentDownloadFileName(file.FileName);

                        //Download
                        clientDownload = new WebClient();

                        //Added the function to support proxy
                        clientDownload.Proxy             = System.Net.WebProxy.GetDefaultProxy();
                        clientDownload.Proxy.Credentials = CredentialCache.DefaultCredentials;
                        clientDownload.Credentials       = System.Net.CredentialCache.DefaultCredentials;
                        //End added

                        clientDownload.DownloadProgressChanged += (object sender, DownloadProgressChangedEventArgs e) =>
                        {
                            try
                            {
                                this.SetProcessBar(e.ProgressPercentage, (int)((nDownloadedTotal + e.BytesReceived) * 100 / total));
                            }
                            catch (Exception exp)
                            {
                                MessageBox.Show(exp.Message, ConstFile.MESSAGETITLE, MessageBoxButtons.OK, MessageBoxIcon.Information);
                            }
                        };

                        clientDownload.DownloadFileCompleted += (object sender, AsyncCompletedEventArgs e) =>
                        {
                            try
                            {
                                DealWithDownloadErrors();
                                DownloadFileInfo dfile = e.UserState as DownloadFileInfo;
                                nDownloadedTotal += dfile.Size;
                                this.SetProcessBar(0, (int)(nDownloadedTotal * 100 / total));
                                evtPerDonwload.Set();
                            }
                            catch (Exception exp)
                            {
                                MessageBox.Show(exp.Message, ConstFile.MESSAGETITLE, MessageBoxButtons.OK, MessageBoxIcon.Information);
                            }
                        };

                        evtPerDonwload.Reset();

                        //Download the folder file
                        //string tempFolderPath1 = CommonUnitity.GetFolderUrl(file);
                        //if (!string.IsNullOrEmpty(tempFolderPath1))
                        //{
                        //    tempFolderPath = Path.Combine(CommonUnitity.SystemBinUrl, ConstFile.TEMPFOLDERNAME);
                        //    tempFolderPath += tempFolderPath1;
                        //}
                        //else
                        //{
                        tempFolderPath = Path.Combine(CommonUnitity.SystemBinUrl, ConstFile.TEMPFOLDERNAME);
                        //}

                        string localFile = Path.Combine(tempFolderPath, file.FileFullName);
                        string dir       = Path.GetDirectoryName(localFile);
                        if (!Directory.Exists(dir))
                        {
                            Directory.CreateDirectory(dir);
                        }

                        clientDownload.DownloadFileAsync(new Uri(file.DownloadUrl), localFile, file);

                        //Wait for the download complete
                        evtPerDonwload.WaitOne();

                        clientDownload.Dispose();
                        clientDownload = null;

                        //Remove the downloaded files
                        this.downloadFileList.Remove(file);
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, ConstFile.MESSAGETITLE, MessageBoxButtons.OK, MessageBoxIcon.Information);
                    //ShowErrorAndRestartApplication(ex.Message);
                    //throw;
                }
            }
            //When the files have not downloaded,return.
            if (downloadFileList.Count > 0)
            {
                return;
            }

            //Test network and deal with errors if there have
            DealWithDownloadErrors();

            //Debug.WriteLine("All Downloaded");
            foreach (DownloadFileInfo file in this.allFileList)
            {
                string tempUrlPath = CommonUnitity.GetFolderUrl(file);
                string oldPath     = string.Empty;
                string newPath     = string.Empty;
                try
                {
                    if (!string.IsNullOrEmpty(tempUrlPath))
                    {
                        oldPath = Path.Combine(CommonUnitity.SystemBinUrl + tempUrlPath.Substring(1), file.FileName);
                        newPath = Path.Combine(CommonUnitity.SystemBinUrl + ConstFile.TEMPFOLDERNAME + tempUrlPath, file.FileName);
                    }
                    else
                    {
                        oldPath = Path.Combine(CommonUnitity.SystemBinUrl, file.FileName);
                        newPath = Path.Combine(CommonUnitity.SystemBinUrl + ConstFile.TEMPFOLDERNAME, file.FileName);
                    }

                    //just deal with the problem which the files EndsWith xml can not download
                    //System.IO.FileInfo f = new FileInfo(newPath);
                    //if (file.Size!= f.Length && !file.FileName.ToString().EndsWith(".xml"))
                    //{
                    //    ShowErrorAndRestartApplication("XML文件不能下载!");
                    //}

                    //Added for dealing with the config file download errors
                    string newfilepath = string.Empty;
                    if (newPath.Substring(newPath.LastIndexOf(".") + 1).Equals(ConstFile.CONFIGFILEKEY))
                    {
                        if (System.IO.File.Exists(newPath))
                        {
                            if (newPath.EndsWith("_"))
                            {
                                newfilepath = newPath;
                                newPath     = newPath.Substring(0, newPath.Length - 1);
                                oldPath     = oldPath.Substring(0, oldPath.Length - 1);
                            }
                            File.Move(newfilepath, newPath);
                        }
                    }
                    //End added

                    if (File.Exists(oldPath))
                    {
                        MoveFolderToOld(oldPath, newPath);
                    }
                    else
                    {
                        //Edit for config_ file
                        if (!string.IsNullOrEmpty(tempUrlPath))
                        {
                            if (!Directory.Exists(CommonUnitity.SystemBinUrl + tempUrlPath.Substring(1)))
                            {
                                Directory.CreateDirectory(CommonUnitity.SystemBinUrl + tempUrlPath.Substring(1));
                                MoveFolderToOld(oldPath, newPath);
                            }
                            else
                            {
                                MoveFolderToOld(oldPath, newPath);
                            }
                        }
                        else
                        {
                            MoveFolderToOld(oldPath, newPath);
                        }
                    }
                }
                catch (Exception exp)
                {
                    MessageBox.Show(exp.Message, ConstFile.MESSAGETITLE, MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }

            //After dealed with all files, clear the data
            this.allFileList.Clear();

            if (this.downloadFileList.Count == 0)
            {
                Exit(true);
            }
            else
            {
                Exit(false);
            }

            evtDownload.Set();
        }