【问题标题】:How to get the files of remote directory using a pattern with C# and WinSCP如何使用 C# 和 WinSCP 模式获取远程目录的文件
【发布时间】:2016-01-08 15:46:19
【问题描述】:

我正在尝试从具有 FTP/SFTP 连接的远程服务器获取特定文件,我遇到的问题是,我正在尝试获取具有特定模式的远程目录中的文件数。我正在使用面具,但对我不起作用,它会引发异常: 这就是我所拥有的

DataFile.sRemoteDirectory = "/user/ftpuser/test/";
receivepattern = "Del*";
filesCount =
    session.ListDirectory(
        session.EscapeFileMask(DataFile.sRemoteDirectory + receivepattern))
    .Files.Where(x => !x.IsDirectory).Count();

【问题讨论】:

    标签: c# ftp sftp winscp winscp-net


    【解决方案1】:

    Session.ListDirectory method 不接受通配符,只接受路径。


    由于 WinSCP .NET 程序集 5.9,您可以改用 Session.EnumerateRemoteFiles method

    filesCount =
        session.EnumerateRemoteFiles(
            DataFile.sRemoteDirectory, receivepattern, EnumerationOptions.None).Count();
    

    在旧版本中,您必须自己过滤Session.ListDirectory返回的文件:

    Regex r = new Regex("^Del.*");
    
    filesCount = session.ListDirectory(DataFile.sRemoteDirectory).Files
        .Where(x => !x.IsDirectory)
        .Where(x => r.Match(x.Name))
        .Count()
    

    查看官方示例 Listing files matching wildcard(尽管在 PowerShell 中)。

    【讨论】:

      【解决方案2】:

      这就是我所做的并且它有效!希望有人帮助这段代码,我使用了正则表达式,其中receivepattern是使用的模式:

      receivepattern = "^[\\d\\w]*" + receivepattern;
      r = new Regex(receivepattern);
      filesCount = session.ListDirectory(DataFile.sRemoteDirectory).Files.Where(x => !x.IsDirectory).Where(x => r.IsMatch(x.Name)).Count();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-08-05
        • 2014-06-05
        • 2018-02-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多