/// <summary> /// Internal helper methods to create nodes and assign them as root or child nodes. /// </summary> /// <param name="helper"></param> /// <param name="parentNode"></param> /// <param name="parentCollection"></param> private void RequestHelper(TreeViewFolderBrowserNodeFactory helper, TreeNodePath parentNode, System.Windows.Forms.TreeNodeCollection parentCollection) { FTPLib.FtpClient ftp = FTP; if (parentNode != null) { ftp.ChangeDir(parentNode.Path); } else { ftp.ChangeDir(_directorySeparatorChar); } // foreach (FTPLib.ServerFileData serverData in ftp.List()) { // skip files if there should not be filled in if (!serverData.isDirectory && !ShowFiles) { continue; } // CreateTreeNode(parentNode, serverData.fileName, parentNode != null ? parentNode.Path + "/" + serverData.fileName : _directorySeparatorChar + serverData.fileName, !serverData.isDirectory, serverData.isDirectory, false); } // return; }
private void DownloadFilesAsync(object sender, System.ComponentModel.DoWorkEventArgs e) { AsyncDataStruct ads = (AsyncDataStruct)e.Argument; System.ComponentModel.BackgroundWorker worker = sender as System.ComponentModel.BackgroundWorker; // FTPLib.FtpClient ftp = FTP; int perc, old_perc = 0; // foreach (string remotePath in ads.FileList) { if (worker.CancellationPending) { break; } // open the file on the server and localy string remoteFilePath = System.IO.Path.GetDirectoryName(remotePath); string remoteFileName = System.IO.Path.GetFileName(remotePath); // ftp.ChangeDir(remoteFilePath); ftp.OpenDownload(remotePath, System.IO.Path.Combine(ads.Directory.FullName, remoteFileName), false); // download the file (read it from server, write it to disk) while (true) { perc = ftp.DoDownload(); // No need to report progress everytime we get some bytes // because it causes a flickery effect on the screen in most cases. if (perc > old_perc) { worker.ReportProgress(perc, remoteFileName); } // is the download done? if (perc == 100) { break; } old_perc = perc; } } }