public CopyFilesQueue(string SourceFld, String TargetFld /*, WebBrowser Browser*/, CheckedListBox chkList, CancellationToken cancellationToken, delegateCreateElement c, delegateUpdateElement u, delegateGetElement g, delegateProgressBar PM, delegateProgressBar PV ) { this.SetProgressBarMaximum = PM; this.SetProgressBarValue = PV; this.SourceFolder = SourceFld; this.cancellationToken = cancellationToken; this.CreateElement = c; this.UpdateElement = u; this.GetElement = g; TargetFld = TargetFld.Trim(); if (!TargetFld.EndsWith("\\")) { TargetFld += "\\"; } this.TargetFolder = @"\" + TargetFld.Substring(0, 1) + @"$" + TargetFld.Substring(2); BaseFolderLenght = SourceFolder.Length; divFile = (HtmlElement)THIS.Invoke(CreateElement, "div"); divFile.SetAttribute("id", "div.Files"); StringBuilder Output = new StringBuilder(); GetFolder(SourceFolder, Output); Output.Append("Total " + File.Count + " files<br>"); divFile.InnerHtml = Output.ToString() + _BRLF; THIS.BeginInvoke(UpdateElement, divFile); divHost = (HtmlElement)THIS.Invoke(CreateElement, "div"); divHost.SetAttribute("id", "div.Hosts"); divHost.InnerHtml = HTMLTagSpan("Host list:", CSS_BaseHighLight) + _BRLF; GetHost(chkList); THIS.BeginInvoke(UpdateElement, divHost); THIS.BeginInvoke(UpdateElement, divFile); Host.ForEach(h => h.FCount = File.Count); THIS.BeginInvoke(SetProgressBarMaximum, File.Count * Host.Count); }
async void CopyFiles() { await Task.Run(() => { delegateCreateElement c = new delegateCreateElement(CreateHtmlElement); delegateUpdateElement u = new delegateUpdateElement(UpdateHtmlElement); delegateGetElement g = new delegateGetElement(GetHtmlElement); delegateProgressBar PM = new delegateProgressBar(SetProgressBarMaximum); delegateProgressBar PV = new delegateProgressBar(SetProgressBarValue); /* * HtmlElement divFile; * divFile = (HtmlElement)THIS.Invoke(c, "div"); * divFile.SetAttribute("id", "div.Files"); * divFile.InnerHtml = "FILES"; * BeginInvoke(u, divFile); */ CopyFilesQueue CopyQ = new CopyFilesQueue(tSourceCopy.Text, tTargetCopy.Text /*, wResult/*.Document*/, chkList_PC, cts.Token, c, u, g, PM, PV); CopyQ.Copy(); cts.Cancel(); End_Run(); }); }
/** * extract zip file * */ private void extract_zip(object sender, Ionic.Zip.ExtractProgressEventArgs e) { if (e.EventType == Ionic.Zip.ZipProgressEventType.Extracting_BeforeExtractEntry) { Int32 total_size = 0; if (Int32.MaxValue < e.CurrentEntry.UncompressedSize) { total_size = (Int32)(e.CurrentEntry.UncompressedSize / 65536); } else { total_size = (Int32)e.CurrentEntry.UncompressedSize; } Invoke(new delegateProgressBar((Int32 v) => { progressBar1.Value = 0; progressBar1.Minimum = 0; progressBar1.Maximum = v; }), new Object[] { total_size }); } else if (e.EventType == Ionic.Zip.ZipProgressEventType.Extracting_EntryBytesWritten) { delegateProgressBar increment_bar = new delegateProgressBar((int v) => { Cursor.Current = Cursors.WaitCursor; progressBar1.Value = v; }); if (Int32.MaxValue < e.CurrentEntry.UncompressedSize) { Object[] inc_arg = { (Int32)e.BytesTransferred / 65536 }; Invoke(increment_bar, inc_arg); } else { Object[] inc_arg = { (Int32)e.BytesTransferred }; Invoke(increment_bar, inc_arg); } } else { // nothing todo } }
/** * extract tar file * */ private void extract_tar(TarInputStream tar, string desitination) { delegateProgressBar increment_bar = new delegateProgressBar((int v) => { Cursor.Current = Cursors.WaitCursor; progressBar1.Value = v; }); ICSharpCode.SharpZipLib.Tar.TarEntry entry = tar.GetNextEntry(); while (entry != null) { if (entry.IsDirectory == true) { if (Directory.Exists(desitination + "\\" + entry.Name)) Directory.Delete(desitination + "\\" + entry.Name, true); if (!Directory.Exists(desitination + "\\" + entry.Name)) Directory.CreateDirectory(desitination + "\\" + entry.Name); entry = tar.GetNextEntry(); continue; } Invoke(new delegateUpdateLabel((string s) => { this.label2.Text = s; }), new Object[] { entry.Name + " extracting ..." }); Invoke(new delegateProgressBar((Int32 v) => { progressBar1.Value = 0; progressBar1.Minimum = 0; progressBar1.Maximum = v; }), new Object[] { (Int32.MaxValue < entry.Size) ? (Int32)(entry.Size / 65536) : (Int32)entry.Size }); using (FileStream dest = new FileStream(desitination + "\\" + entry.Name, FileMode.Create, FileAccess.Write)) { Int32 count = 0; Int32 write_total = 0; byte[] buffer = new byte[32768]; using (BinaryWriter br = new BinaryWriter(dest)) { while ((count = tar.Read(buffer, 0, 32768)) > 0) { br.Write(buffer, 0, count); write_total += count; if (Int32.MaxValue < entry.Size) { Object[] inc_arg = { (Int32)write_total / 65536 }; Invoke(increment_bar, inc_arg); } else { Object[] inc_arg = { write_total }; Invoke(increment_bar, inc_arg); } } br.Flush(); br.Close(); } dest.Close(); } entry = tar.GetNextEntry(); } }