es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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 ‘.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que estás intentando comparar dos tipos de objetos diferentes (System.IO.FileInfo y RemoteFileInfo) utilizando la función Except. Desafortunadamente, esto no funcionará ya que la función Except requiere que ambos objetos sean del mismo tipo.

    Podrías intentar usar una combinación de Where y Contains para comparar las dos listas. Por ejemplo:

    var firstNotSecond = list1.Where(x => !list2.Contains(x)).ToList();
    

    Esto devolverá una lista de objetos RemoteFileInfo que no están presentes en la lista list2.

Comments are closed.