Comparar archivos locales y remotos usando la librería .NET de WinSCP.
Estoy tratando de implementar una lógica para comparar la información de los archivos entre el servidor remoto y el servidor local.
Necesito comparar el nombre de los archivos entre la carpeta local y la carpeta remota y descargar sólo los archivos nuevos.
Intenté cargar los archivos en una lista y usar la función Except, pero no funcionó.
Agradeceré su ayuda.
A continuación se muestra uno de los escenarios que intenté:
using (Session session = new Session())
{
// Conectar
session.Open(sessionOptions);
const string remotePath = "/Test";
const string localPath = @"C:\Local";
const string ArchivePath = @"C:\Users\Local\Archive";
System.IO.DirectoryInfo dir2 = new System.IO.DirectoryInfo(ArchivePath);
RemoteDirectoryInfo dir1 = session.ListDirectory(remotePath);
IEnumerable<System.IO.FileInfo> list2 =
dir2.GetFiles("*.*", System.IO.SearchOption.AllDirectories);
IEnumerable<RemoteFileInfo> list1 =
session.EnumerateRemoteFiles(remotePath, "*.csv", EnumerationOptions.None);
var firstNotSecond = list1.Except(list2).ToList();
}
Obtengo un error como:
‘IEnumerable
‘ no contiene una definición para ‘Except’ y el mejor método de extensión de sobrecarga ‘Queryable.Except (IQueryable , IEnumerable )’ requiere un receptor de tipo ‘IQueryable ‘.
davy.ai
Parece que estás intentando comparar dos tipos de objetos diferentes (
System.IO.FileInfo
yRemoteFileInfo
) utilizando la funciónExcept
. Desafortunadamente, esto no funcionará ya que la funciónExcept
requiere que ambos objetos sean del mismo tipo.Podrías intentar usar una combinación de
Where
yContains
para comparar las dos listas. Por ejemplo:Esto devolverá una lista de objetos
RemoteFileInfo
que no están presentes en la listalist2
.