/// <summary> /// Асинхронная загрузка файла средством <paramref name="ftpLoader"/> /// </summary> /// <param name="pathSrc">путь удаленного источника</param> /// <param name="pathTrg">локальный путь для сохранения</param> /// <param name="ftpLoader">объект, используемый для работы по ftp-протоколу</param> /// <returns></returns> private async Task DownloadAsync(string pathSrc, string pathTrg, FtpClient.FtpClient ftpLoader) { var result = await ftpLoader.DownloadFileAsync(pathSrc, pathTrg); if (result == FtpStatusCode.ClosingData && RemoveFromBlocks) { await ftpLoader.DeleteFileAsync(pathSrc); } }
/// <summary> /// Запуск загрузки файлов из удаленного ресурса <paramref name="address"/> /// </summary> /// <param name="address"></param> /// <returns></returns> private async Task DoDownloadAndDeleteAsync(string address) { var logFolderName = BuildLogFolderName(); var rootPathTrg = Path.Combine(SavePath, address); var ftpLoader = new FtpClient.FtpClient(address, _configurationApp.RequestTimeout, _configurationApp.ReadWriteTimeout); var listUsbDisk = await ftpLoader.ListFilesAsync(BuildRemotePath(USBDISK)); var listNandFlash = await ftpLoader.ListFilesAsync(BuildRemotePath(NANDFLASH)); var logsUsbDisk = listUsbDisk.Where(file => file.EndsWith(FILE_EXTENSIONS)); var logsNandDisk = listNandFlash.Where(file => file.EndsWith(FILE_EXTENSIONS)); if (Zipped) { Directory.CreateDirectory(rootPathTrg); var pathPackage = Path.Combine(rootPathTrg, logFolderName); using (var package = Package.Open(pathPackage + ".zip", FileMode.Create, FileAccess.ReadWrite)) { foreach (var fileSrc in logsUsbDisk) { var pathSrc = Path.Combine(BuildRemotePath(USBDISK), fileSrc); var partPackageName = Path.Combine(USBDISK, fileSrc); await DownloadZipAsync(pathSrc, package, partPackageName, ftpLoader); } foreach (var fileSrc in logsNandDisk) { var pathSrc = Path.Combine(BuildRemotePath(NANDFLASH), fileSrc); var partPackageName = Path.Combine(NANDFLASH, fileSrc); await DownloadZipAsync(pathSrc, package, partPackageName, ftpLoader); } } } else { var diUsbDisk = Directory.CreateDirectory(Path.Combine(rootPathTrg, logFolderName, USBDISK)); var diNandFlash = Directory.CreateDirectory(Path.Combine(rootPathTrg, logFolderName, NANDFLASH)); foreach (var fileSrc in logsUsbDisk) { var pathSrc = Path.Combine(BuildRemotePath(USBDISK), fileSrc); var pathTrg = Path.Combine(diUsbDisk.FullName, fileSrc); await DownloadAsync(pathSrc, pathTrg, ftpLoader); } foreach (var fileSrc in logsNandDisk) { var pathSrc = Path.Combine(BuildRemotePath(NANDFLASH), fileSrc); var pathTrg = Path.Combine(diNandFlash.FullName, fileSrc); await DownloadAsync(pathSrc, pathTrg, ftpLoader); } } }
/// <summary> /// Асинхронная загрузка файла средством <paramref name="ftpLoader"/> с сохранением в zip-пакет /// </summary> /// <param name="pathSrc">путь удаленного источника</param> /// <param name="zipPackage">объект, представляющий контейнер для хранения нескольких объектов</param> /// <param name="partPackageName">имя части пакета</param> /// <param name="ftpLoader">объект, используемый для работы по ftp-протоколу</param> /// <returns></returns> private async Task DownloadZipAsync(string pathSrc, Package zipPackage, string partPackageName, FtpClient.FtpClient ftpLoader) { var partUri = PackUriHelper.CreatePartUri(new Uri(partPackageName, UriKind.Relative)); var packagePart = zipPackage.CreatePart(partUri, System.Net.Mime.MediaTypeNames.Text.Plain, CompressionOption.Normal); var result = await ftpLoader.DownloadFileAsync(pathSrc, packagePart.GetStream()); if (result == FtpStatusCode.ClosingData && RemoveFromBlocks) { await ftpLoader.DeleteFileAsync(pathSrc); } }