Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public sealed class WebClientFileDownloader : IFileDownloader
- {
- private NetworkCredential _networkCredentials;
- public string UserName => _networkCredentials.UserName;
- public string Password => _networkCredentials.Password;
- public string Host { get; private set; }
- public WebClientFileDownloader(string host, string userName = null, string password = null)
- {
- _networkCredentials = new NetworkCredential(userName, password);
- Host = host;
- }
- public async Task DownloadFileAsync(FullFileInfo fullFileInfo, CancellationToken cancellationToken, IProgress<double> progress)
- {
- Task downloadingTask = DownloadFileAsync(fullFileInfo.LocalFileInfo, fullFileInfo.FtpFileInfo, cancellationToken, progress);
- await Task.WhenAny(downloadingTask, Task.Delay(int.MaxValue, cancellationToken));
- }
- private async Task DownloadFileAsync(FileInfo localFileInfo, FtpFileInfo ftpFileInfo, CancellationToken cancellationToken, IProgress<double> progress)
- {
- FileInfo tempLocalFile = new FileInfo(localFileInfo.FullName + "_temp" + DateTime.UtcNow.Ticks);
- Debug.Log(tempLocalFile.FullName);
- try
- {
- using (WebClient client = new WebClient() { Credentials = _networkCredentials })
- using (cancellationToken.Register(() =>
- {
- Debug.Log("Отменю текущую загрузку");
- client.CancelAsync();
- Debug.Log("Отменил текущую загрузку");
- }))
- {
- client.DownloadProgressChanged += (s, e) =>
- progress.Report(e.BytesReceived / (double)ftpFileInfo.Size * 100D);
- Uri url = new Uri(new Uri("ftp://" + Host), ftpFileInfo.FullName);
- await client.DownloadFileTaskAsync(url, tempLocalFile.FullName);
- tempLocalFile.MoveTo(localFileInfo.FullName);
- }
- }
- catch (Exception exc)
- {
- Debug.LogException(exc);
- tempLocalFile.DeleteIfExists();
- }
- Debug.Log("Выхожу из метода загрузки");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement