Бесплатная библиотека FTP [закрыто]

95

Можете ли вы порекомендовать бесплатную библиотеку (класс) FTP для C #.

Класс должен быть хорошо написан и иметь хорошую производительность.

Йозеф Ван Зил
источник

Ответы:

76

Вы можете рассмотреть FluentFTP , ранее известный как System.Net.FtpClient .

Он выпущен под лицензией MIT и доступен на NuGet (FluentFTP).

Эрвин Майер
источник
6
СПАСИБО!!! Это действительно очень хорошо работает! он отображает каталог с правильной датой и временем :)))) и это быстро! пример кода: FtpClient ftp = new FtpClient (txtUsername.Text, txtPassword.Text, txtFTPAddress.Text); FtpListItem[] items = ftp.GetListing();//here you can get list with type, name, modified date and other properties. FtpFile file = new FtpFile(ftp, "8051812.xml");//file to get file.Download("c:\\8051812.xml");//download file.Name = "8051814.xml";//change name to get new file.Download("c:\\8051814.xml"); ftp.Disconnect();//close
Звиади
1
Обратите внимание, что скомпилированные библиотеки предназначены для .NET 3, но код тривиально преобразовать в 2.0
Дина
3
Также доступен пакет NuGet: System.Net.FtpClient
Jeroen K
1
Несколько менее просто (сейчас?) Вместо file.Download Stream s = connection.OpenRead (filename)
Jeroen K
2
Верно, но вы можете легко добавить свои собственные методы расширения, чтобы иметь тот же синтаксис, что и раньше. Вот мои: pastebin.com/FiKMrH76
Эрвин Майер
20

Почему бы вам не использовать библиотеки, входящие в состав .NET framework: http://msdn.microsoft.com/en-us/library/ms229718.aspx ?

РЕДАКТИРОВАТЬ: апрель 2019 г., автор https://stackoverflow.com/users/1527/ Этот ответ больше недействителен. Другие ответы одобрены Microsoft.

Они были разработаны Microsoft, которая больше не рекомендует их использовать:

Мы не рекомендуем вам использовать класс FtpWebRequest для новых разработок. Дополнительные сведения и альтернативы FtpWebRequest см. В разделе WebRequest не следует использовать на GitHub. ( https://docs.microsoft.com/en-us/dotnet/api/system.net.ftpwebrequest?view=netframework-4.7.2 )

Страница «WebRequest not be used», в свою очередь, указывает на этот вопрос как на исчерпывающий список библиотек!

0fnt
источник
3
Я не уверен на 100%, но разве эти классы не подключаются повторно по каждому запросу? Если это так, то производительность пострадает ..
Питер
22
Этот FtpWebRequestкласс действительно работает только для простых транзакционных FTP-действий, которые можно смоделировать по шаблону запроса / ответа, например, для загрузки или выгрузки отдельных файлов. Его очень сложно использовать для выполнения таких задач, как создание структуры папок FTP или загрузка и загрузка в одном сеансе.
Дай
1
«Должен» - ключевое слово. Вероятно, не стоит тратить время на отладку примеров FtpWebRequest, которые работают только в ваших модульных тестах.
CZahrobsky
1
Очень ... Плохой компонент - вы не можете легко перечислить файлы или папки, если вы укажете неправильный URL-адрес - он будет работать без каких-либо исключений, но вернет html с сообщением - я не нашел ни одного файла (так что вам нужно проанализируйте этот html) ... Я думаю, что Майкрософт может потратить некоторое время и создать нормальную библиотеку, а не эту ...
VikciaR
2
В документации MS docs.microsoft.com/en-us/dotnet/api/… говорится, что не следует использовать для новых проектов, и указывается на github.com/dotnet/platform-compat/blob/master/docs/DE0003.md, который в поворот указывает на этот вопрос
Пит Киркхэм
12

edtFTPnet - это бесплатная, быстрая FTP-библиотека с открытым исходным кодом для .NET, написанная на C #.

Брюс Блэкшоу
источник
7
Устаревший дизайн сайта не дает мне уверенности в качестве библиотеки.
Jeroen K
1
Это под лицензией LGPL. Итак, если вы разрабатываете коммерческий продукт / услугу, вы открываете эту банку червей о том, что вы можете делать и чего не можете, что включать и т. Д. И несколько ответов на SO и другие дают разные мнения по этому поводу. ..
Алексей Винниченко
Я один из разработчиков этого софта. Я подумал, что добавлю, что мы никогда никого не преследовали за нарушения LGPL и даже не думали искать такие случаи. Основная причина, по которой мы выбрали эту лицензию, когда библиотека была впервые опубликована в 2003 году, заключалась в том, что LGPL была одной из немногих широко известных лицензий. Сейчас есть много других вариантов, и нам, вероятно, следует найти другую лицензию, которая лучше соответствует нашей цели. Единственное, что мы хотим гарантировать, - это то, что никто не использует наше программное обеспечение для создания коммерческого продукта, конкурирующего с ним. У кого-нибудь есть предложения по менее обременительной лицензии?
HansA 06
1
Кстати, если ваши юридические лица когда-либо беспокоятся об этом, вы можете просто приобрести более либеральную лицензию за 99 долларов. Да, еще сайт обновился :). Продукт все еще жив, отчасти потому, что он является частью другого очень успешного продукта, то есть CompleteFTP. Спасибо Алексею за указание на эту проблему. Обсудим это.
HansA 06
7

Мне нравится Alex FTPS Client, который написан MVP Майкрософт по имени Алекс Пилотти. Это библиотека C #, которую вы можете использовать в консольных приложениях, Windows Forms, PowerShell, ASP.NET (на любом языке .NET). Если у вас есть многопоточное приложение, вам придется настроить библиотеку для синхронного запуска, но в целом это хороший клиент, который, скорее всего, предоставит вам то, что вам нужно.

Джон К
источник
1

Я только что опубликовал статью, в которой представлены как класс клиента FTP, так и пользовательский элемент управления FTP.

Они просты и не очень быстрые, но очень просты в использовании, и весь исходный код включен. Просто поместите пользовательский элемент управления в форму, чтобы пользователи могли перемещаться по каталогам FTP из вашего приложения.

Джонатан Вуд
источник
1

После долгого исследования того же вопроса я обнаружил, что это чрезвычайно удобно: https://github.com/flagbug/FlagFtp

Например (попробуйте сделать это со стандартной "библиотекой" .net - это будет настоящей головной болью) -> Рекурсивное извлечение всех файлов на FTP-сервере:

  public IEnumerable<FtpFileInfo> GetFiles(string server, string user, string password)
    {
        var credentials = new NetworkCredential(user, password);
        var baseUri = new Uri("ftp://" + server + "/");

        var files = new List<FtpFileInfo>();
        AddFilesFromSubdirectory(files, baseUri, credentials);

        return files;
    }

    private void AddFilesFromSubdirectory(List<FtpFileInfo> files, Uri uri, NetworkCredential credentials)
    {
        var client = new FtpClient(credentials);
        var lookedUpFiles = client.GetFiles(uri);
        files.AddRange(lookedUpFiles);

        foreach (var subDirectory in client.GetDirectories(uri))
        {
            AddFilesFromSubdirectory(files, subDirectory.Uri, credentials);
        }
    }
Стефан
источник
flagftp использует вызовы ftp-клиента Windows. Это ни хорошо, ни плохо, но это означает, что библиотека подвержена тем же ошибкам, которые могут вызывать вызовы ftp в Windows
Джон Мотт