57 lines
2.3 KiB
C#
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;
|
|
}
|
|
}
|
|
} |