Files
monorepo/LCU.API.Internal.FTP/LCU.Api.Internal.FTP/Services/FtpOpertionServices/WinScpListDirectoryService.cs
T
2026-03-24 15:28:37 -05:00

57 lines
2.3 KiB
C#

using System;
using Serilog;
using WinSCP;
using System.Collections.Generic;
using System.Linq;
using LCU.Api.Internal.FTPLib.Models;
using LCU.Api.Internal.FTP.Helpers;
namespace LCU.Api.Internal.FTP.Services.FtpOpertionServices;
public class WinScpListDirectoryService : IWinScpListDirectoryService
{
private const char FileTypeFiles = '-';
public List<string> GetListOfFilesInDirectory(ListDirectoryRequest listDirectoryRequest)
{
try
{
var remoteDirectoryInfo = GetRemoteDirectoryInfo(listDirectoryRequest);
var fileNamesInDirectory = remoteDirectoryInfo.Files.Where(file => file.FileType == FileTypeFiles)
.Select(file => file.Name)
.ToList();
return fileNamesInDirectory;
}
catch (Exception exception)
{
Log.Error(exception, $"Failed to get directory list with WinSCP. " +
$"Host: {listDirectoryRequest.SessionInformation.HostName}, " +
$"RemotePath: {listDirectoryRequest.RemotePath}");
throw;
}
}
public RemoteDirectoryInfo GetRemoteDirectoryInfo(ListDirectoryRequest listDirectoryRequest)
{
RemoteDirectoryInfo remoteDirectoryInfo = null;
try
{
var sessionOptions = WinScpSessionOptionsHelper.CreateSessionOptions(listDirectoryRequest.SessionInformation);
using (var session = new Session())
{
session.Open(sessionOptions);
var transferOptions = new TransferOptions { TransferMode = TransferMode.Binary, PreserveTimestamp = false };
remoteDirectoryInfo = session.ListDirectory(listDirectoryRequest.RemotePath);
ArgumentNullException.ThrowIfNull(remoteDirectoryInfo);
}
return remoteDirectoryInfo;
}
catch (Exception exception)
{
Log.Error(exception, $"Failed to get directory list with WinSCP. " +
$"Host: {listDirectoryRequest.SessionInformation.HostName}, " +
$"RemotePath: {listDirectoryRequest.RemotePath}");
throw;
}
}
}