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