【问题标题】:Download all files except a specific folder from FTP server using WinSCP .NET assembly使用 WinSCP .NET 程序集从 FTP 服务器下载除特定文件夹之外的所有文件
【发布时间】:2019-12-03 01:41:59
【问题描述】:

到目前为止,这是我用来获取文件夹内的所有项目但在此文件夹内的代码,有一个我不想包含在下载中的子文件夹,有没有办法不包含它文件夹 ?

session.GetFiles("/*.*", @"D:\Download\", false, transferOptions);

TransferOptions transferOptions = new TransferOptions();
transferOptions.TransferMode = TransferMode.Binary;

TransferOperationResult transferResult;
transferResult =
    session.GetFiles("/*.*", @"D:\Download\", false, transferOptions);

这是我用来下载所有文件的全部代码

SessionOptions sessionOptions = new SessionOptions
{
    Protocol = Protocol.Ftp,
    HostName = "sample",
    UserName = "sample",
    Password = "sample",
};

using (Session session = new Session())
{
    // Connect
    session.Open(sessionOptions);

    // Your code
    TransferOptions transferOptions = new TransferOptions();
    transferOptions.TransferMode = TransferMode.Binary;

    TransferOperationResult transferResult;
    transferResult =
        session.GetFiles("/*.*", @"D:\Download\", false, transferOptions);


    // Print results
    foreach (TransferEventArgs transfer in transferResult.Transfers)
    {
        listBox1.Items.Add("Files Downloaded : "+ transfer.FileName);
    }
}

编辑:这是我在 FileMask 中尝试过的

TransferOptions transferOptions = new TransferOptions();
transferOptions.FileMask = "/*.*|/.git";


TransferOperationResult transferResult;
transferResult =
    session.GetFiles("/*.*", @"D:\Download\", false, transferOptions);

【问题讨论】:

  • session是什么类型?
  • @JohnWu 我正在使用 FTP。
  • 您能否提供类的名称,或者粘贴声明它并初始化它的代码? “FTP”可能意味着很多东西。

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


【解决方案1】:

使用 TransferOptions.FileMask

TransferOptions transferOptions = new TransferOptions();
transferOptions.FileMask = "*.* | .git/";
...
...
transferResult = session.GetFiles("/someremotefolder/*.*", @"D:\Download\", false, transferOptions);

注意: - 管道| 分隔符结合了includeexclude 掩码。

更多详情:https://winscp.net/eng/docs/file_mask#include_exclude

【讨论】:

  • 你能在编辑下检查我的新代码吗?在文中?我已经尝试了文件掩码但它不起作用,我已经排除了 .git 文件夹但它仍然得到它。
  • 我刚刚用轻微的 mod 编辑了我的帖子(注意 | 和 .git 之后的 / 之间的空格)和 /someremotefolder - 我已经删除了你原来的 通配符,因为您已经提供了 FileMask,所以不需要它……您只需要提供远程文件夹而不是通配符选项。
  • 是否可以排除带有Like this Name 的文件夹例如我有 2 个名为 sample1 和 sample2 的文件夹,我想使用此代码排除它们。transferOptions.FileMask = "*.*|sample1/";
  • 它仍然应该是"/someremotefolder/*"——另一方面,没有必要在FileMask中指定包罗万象的掩码——它可以是transferOptions.FileMask = "| .git/";|周围的空格可以没关系)+1 反正
猜你喜欢
  • 2017-09-24
  • 2020-12-26
  • 2018-10-28
  • 2020-12-30
  • 2011-03-01
  • 2022-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多