【问题标题】:Compare local and remote files using WinSCP .NET assembly使用 WinSCP .NET 程序集比较本地和远程文件
【发布时间】:2021-12-29 10:06:10
【问题描述】:

我正在尝试实现一些逻辑来比较远程服务器和本地服务器之间的文件信息。 我需要比较本地文件夹和远程文件夹之间的文件名并只下载新文件。 我尝试在列表中使用加载文件并使用Except 函数,但它不起作用。 感谢您的帮助。

请找出我尝试过的场景之一。

using (Session session = new Session())
{
    // Connect
    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();
}

得到类似的错误

“IEnumerable”不包含“Except”的定义,最佳扩展方法重载“Queryable.Except(IQueryable, IEnumerable)”需要“IQueryable”类型的接收器

【问题讨论】:

    标签: c# .net winscp except winscp-net


    【解决方案1】:

    您只需要比较文件名:

    var firstNotSecond =
        list1.Select(_ => _.Name).Except(list2.Select(_ => _.Name)).ToList();
    

    请注意,WinSCP .NET 已内置此功能。有Session.CompareDirectories

    如果您真的想同步目录,可以使用Session.SynchronizeDirectories。一种可以为您做所有事情的方法。

    session.SynchronizeDirectories(
        SynchronizationMode.Local, localPath, remotePath, false).Check()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-05
      • 2015-04-10
      • 2010-11-30
      • 2019-06-26
      • 1970-01-01
      • 1970-01-01
      • 2015-03-17
      • 1970-01-01
      相关资源
      最近更新 更多