using Microsoft.Extensions.Configuration; using PartSource.Automation.Models.Configuration; using System; using System.Collections.Generic; using System.Configuration; using System.IO; using System.Net; using System.Threading.Tasks; namespace PartSource.Automation.Services { public class FtpService { private readonly FtpConfiguration _ftpConfiguration; public FtpService(FtpConfiguration ftpConfiguration) { _ftpConfiguration = ftpConfiguration; } public string[] ListFiles(string directory) { FtpWebRequest request = (FtpWebRequest)WebRequest.Create(new Uri($"{_ftpConfiguration.Url}/{directory}")); request.Credentials = new NetworkCredential(_ftpConfiguration.Username, _ftpConfiguration.Password); request.Method = WebRequestMethods.Ftp.ListDirectory; using FtpWebResponse response = (FtpWebResponse)request.GetResponse(); using StreamReader reader = new StreamReader(response.GetResponseStream()); string files = reader.ReadToEnd(); return files.Length > 0 ? files.Split("\r\n") : Array.Empty(); } public void Download(string filename) { string file = $"{_ftpConfiguration.Destination}\\{filename.Replace("/", "\\")}"; FtpWebRequest request = (FtpWebRequest)WebRequest.Create(new Uri($"{_ftpConfiguration.Url}/{filename}")); request.Credentials = new NetworkCredential(_ftpConfiguration.Username, _ftpConfiguration.Password); request.Method = WebRequestMethods.Ftp.DownloadFile; using FtpWebResponse response = (FtpWebResponse)request.GetResponse(); using Stream responseStream = response.GetResponseStream(); using FileStream fileStream = new FileStream($"{_ftpConfiguration.Destination}\\{filename.Replace("/", "\\")}", FileMode.Create); responseStream.CopyTo(fileStream); } } }