public EndDownloadFile ( IAsyncResult asyncResult ) : void | ||
asyncResult | IAsyncResult | The pending asynchronous SFTP request. |
Результат | void |
private void DownloadFilesFromServer() { try { var filelist = new Dictionary<SftpFile, string>(); var remfold = txtRemoteFolderPath.Text.EndsWith("/") ? txtRemoteFolderPath.Text : txtRemoteFolderPath.Text += "/"; var ssh = new SftpClient(txtHost.Text, int.Parse(txtPort.Text), txtUser.Text, txtPassword.Text); ssh.Connect(); foreach (var i in lvSSHFileBrowser.SelectedItems.Cast<EXImageListViewItem>().Select(item => item.Tag as SftpFile)) { if (i.IsRegularFile) { filelist.Add(i, Path.Combine(txtLocalBrowserPath.Text, i.Name)); } if (i.IsDirectory) { foreach (var file in GetFilesRecur(ssh, i)) { var i1 = file.FullName.Replace(remfold, ""); var i2 = i1.Replace('/', '\\'); var i3 = Path.Combine(txtLocalBrowserPath.Text, i2); filelist.Add(file, i3); } } } long totalsize = filelist.Sum(pair => pair.Key.Length); var result = MessageBox.Show(string.Format(Language.SSHTransfer_DownloadFilesFromServer_Download__0__in__1__files_ + "\r\n" + Language.SSHTransfer_DownloadFilesFromServer_Destination_directory__2_, Tools.Misc.LengthToHumanReadable(totalsize), filelist.Count, txtLocalBrowserPath.Text), "Downloading", MessageBoxButtons.YesNoCancel); if (result!=DialogResult.Yes) { EnableButtons(); return; } long totaluploaded = 0; ThreadPool.QueueUserWorkItem(state => { foreach (var file in filelist) { if (!Directory.Exists(Path.GetDirectoryName(file.Value))) { Tools.Misc.ebfFolderCreate(Path.GetDirectoryName(file.Value)); } var asynch = ssh.BeginDownloadFile(file.Key.FullName, new FileStream(file.Value, FileMode.Create)); var sftpAsynch = asynch as SftpDownloadAsyncResult; while (!sftpAsynch.IsCompleted) { SetProgressStatus(totaluploaded + (long)sftpAsynch.DownloadedBytes, totalsize); } totaluploaded += file.Key.Length; ssh.EndDownloadFile(asynch); } EnableButtons(); ssh.Disconnect(); MessageBox.Show(Language.SSHTransfer_DownloadFilesFromServer_Download_finished); }); } catch (Exception ex) { MessageBox.Show(ex.Message); } }
private Task DownloadFileAsync(SftpClient client, string remoteFullName, string localFullName) { var fileStr = new FileStream(localFullName, FileMode.Create); return Task.Factory.FromAsync( (callback, obj) => client.BeginDownloadFile(remoteFullName, fileStr, callback, obj, filePosition => progress.Report(filePosition.ToString(CultureInfo.InvariantCulture))), result => { client.EndDownloadFile(result); if (result.IsCompleted) { fileStr.Close(); } progress.ReportLine(string.Format("File downloaded: {0}", remoteFullName)); }, null); }