Библиотека SSH.Net и использование подстановочных знаков

Мне нужно войти в SFTP с помощью SSH.NET и удалить все файлы в папке, но похоже, что SSH.Net не поддерживает подстановочные знаки. Это правда? Есть ли способ исправить это? Вот мой код.

using (SftpClient sftpClient = new SftpClient(server, port, username, password))
{
    foreach (var d in sftpClient.ConnectionInfo.Encryptions.Where(p => p.Key != "blowfish-cbc").ToList())
    {
        sftpClient.ConnectionInfo.Encryptions.Remove(d.Key);
    }

    sftpClient.Connect();
    sftpClient.DeleteFile("/outgoing/*.*");
    sftpClient.Disconnect();
}

person user1700890    schedule 10.03.2014    source источник
comment
SFTP (протокол) не поддерживает удаление подстановочных знаков. Вам нужно будет составить список файлов вручную и удалить их один за другим.   -  person Cory Nelson    schedule 10.03.2014
comment
Спасибо, Кори! Вы должны были опубликовать это как официальный ответ, а не как комментарий!   -  person user1700890    schedule 11.03.2014


Ответы (1)


Мне тоже не повезло с подстановочными знаками, использующими эту библиотеку. Я только что создал метод расширения (упрощенный):

public static IEnumerable<SftpFile> ListDirectoryWC(this SftpClient client, string pattern, Func<SftpFile,bool> includeTest=null)
{
    string directoryName = (pattern[0] == '/' ? "" : "/") + pattern.Substring(0, pattern.LastIndexOf('/'));
    string regexPattern = pattern.Substring(pattern.LastIndexOf('/') + 1)
            .Replace(".", "\\.")
            .Replace("*", ".*")
            .Replace("?", ".");
    Regex reg = new Regex('^' + regexPattern + '$');

    var results = client.ListDirectory(String.IsNullOrEmpty(directoryName) ? "/" : directoryName)
        .Where(e => reg.IsMatch(e.Name) && (includeTest == null || includeTest(e)));
    return results;
}

public static void DeleteFileWC(this SftpClient client, string pattern, Func<SftpFile,bool> includeTest=null)
{
    foreach(var file in client.ListDirectoryWC(pattern, includeTest))
    {
        file.Delete();
    }
}
person Kris Oye    schedule 11.02.2016