Bezpłatna biblioteka FTP [zamknięta]

94

Czy możesz polecić bezpłatną bibliotekę FTP (klasę) dla C #.

Zajęcia muszą być dobrze napisane i mieć dobre wyniki.

Josef Van Zyl
źródło

Odpowiedzi:

74

Możesz rozważyć FluentFTP , wcześniej znany jako System.Net.FtpClient .

Jest wydany na licencji MIT i dostępny na NuGet (FluentFTP).

Erwin Mayer
źródło
6
DZIĘKUJĘ CI!!! To naprawdę działa bardzo dobrze! wyświetla katalog z poprawną datą i godziną :)))) i jest szybki! przykładowy kod: 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
Zviadi
1
Zauważ, że skompilowane biblioteki są przeznaczone dla .NET 3, ale kod jest trywialny do konwersji do wersji 2.0
Deanna
3
Jest również dostępny jako pakiet NuGet jako: System.Net.FtpClient
Jeroen K
1
Nieco mniej łatwe (teraz?), Zamiast pliku.Download, Stream s = connection.OpenRead (nazwa pliku)
Jeroen K
2
To prawda, ale możesz łatwo dodać własne metody rozszerzające, aby mieć taką samą składnię jak poprzednio. Oto moje: pastebin.com/FiKMrH76
Erwin Mayer
20

Dlaczego nie używasz bibliotek, które są dostarczane z platformą .NET: http://msdn.microsoft.com/en-us/library/ms229718.aspx ?

EDYCJA: 2019 kwiecień przez https://stackoverflow.com/users/1527/ Ta odpowiedź jest już nieaktualna. Inne odpowiedzi są zatwierdzane przez firmę Microsoft.

Zostały zaprojektowane przez Microsoft, który nie zaleca już ich używania:

Nie zalecamy używania klasy FtpWebRequest do nowego programowania. Aby uzyskać więcej informacji i alternatyw dla FtpWebRequest, zobacz WebRequest nie powinien być używany w GitHub. ( https://docs.microsoft.com/en-us/dotnet/api/system.net.ftpwebrequest?view=netframework-4.7.2 )

Strona „WebRequest nie powinien być używany” z kolei wskazuje na to pytanie jako ostateczną listę bibliotek!

0fnt
źródło
3
Nie jestem pewien w 100%, ale czy te klasy nie łączą się ponownie przy każdym żądaniu? Gdyby tak było, występ by ucierpiał ...
Peter
22
FtpWebRequestKlasa tylko naprawdę działa dla prostych, transakcyjne działania FTP, które mogą być modelowane na wzór żądanie / odpowiedź, takich jak pobieranie lub przesyłanie pojedynczych plików. Bardzo trudno jest go używać do wykonywania zadań, takich jak tworzenie struktury folderów FTP lub przesyłanie i pobieranie w tej samej sesji.
Dai
1
„Powinien” jest słowem operacyjnym. Prawdopodobnie nie warto poświęcać czasu na debugowanie przykładów FtpWebRequest, które działają tylko w testach jednostkowych.
CZahrobsky
1
Bardzo ... Zły komponent - nie możesz łatwo wyświetlić listy plików lub folderów, jeśli podasz zły adres URL - będzie działał bez wyjątku, ale zwróci html z komunikatem - nie znalazłem żadnego pliku (więc musisz parse that html) ... Myślę, że Microsoft może poświęcić trochę czasu i stworzyć normalną bibliotekę, a nie tę ...
VikciaR
2
Dokumentacja MS docs.microsoft.com/en-us/dotnet/api/… mówi, że nie należy jej używać w nowych projektach i wskazuje na github.com/dotnet/platform-compat/blob/master/docs/DE0003.md, które w zwrot punktów na to pytanie
Pete Kirkham
12

edtFTPnet to darmowa, szybka biblioteka FTP typu open source dla platformy .NET, napisana w języku C #.

Bruce Blackshaw
źródło
7
Przestarzały wygląd strony nie daje mi zbytniej pewności co do jakości biblioteki.
Jeroen K
1
Jest na licencji LGPL. Więc jeśli rozwijasz komercyjny produkt / usługę, otwierasz puszkę robaków tego, co możesz zrobić, a czego nie, co dołączyć itp. Wiele odpowiedzi na SO i innych daje różne opinie na ten temat. ..
Oleksii Vynnychenko
Jestem jednym z twórców tego oprogramowania. Pomyślałem, że po prostu się włamuję, że nigdy nie ścigaliśmy nikogo z powodu naruszeń LGPL ani nawet nie myśleliśmy o szukaniu takich przypadków. Głównym powodem, dla którego wybraliśmy tę licencję, gdy biblioteka została po raz pierwszy opublikowana w 2003 roku, był fakt, że LGPL była jedną z niewielu tak szeroko znanych licencji na świecie. Obecnie jest o wiele więcej opcji i prawdopodobnie powinniśmy znaleźć inną licencję, która lepiej pasuje do naszego celu. Chcemy tylko zapewnić, że nikt nie używa naszego oprogramowania do tworzenia produktu komercyjnego, który z nim konkuruje. Czy ktoś ma sugestie dotyczące mniej uciążliwej licencji?
HansA
1
Nawiasem mówiąc, jeśli Twoi prawnicy kiedykolwiek się tym martwią, możesz po prostu kupić bardziej liberalną licencję za 99 USD. Aha, a także strona została zaktualizowana :). Produkt wciąż żyje, częściowo dlatego, że jest częścią innego bardzo udanego produktu, czyli CompleteFTP. Dzięki Oleksii za wskazanie tego problemu. Omówimy to.
HansA
7

Podoba mi się Alex FTPS Client, którego autorem jest Alex Pilotti, MVP firmy Microsoft. Jest to biblioteka C #, której można używać w aplikacjach konsoli, Windows Forms, PowerShell, ASP.NET (w dowolnym języku .NET). Jeśli masz aplikację wielowątkową, będziesz musiał skonfigurować bibliotekę tak, aby działała synchronicznie, ale ogólnie dobry klient, który najprawdopodobniej zapewni Ci to, czego potrzebujesz.

John C.
źródło
1

Właśnie opublikowałem artykuł, w którym przedstawiono zarówno klasę klienta FTP, jak i kontrolkę użytkownika FTP.

Są proste i niezbyt szybkie, ale są bardzo łatwe w użyciu i zawierają cały kod źródłowy. Po prostu upuść kontrolę użytkownika na formularzu, aby umożliwić użytkownikom nawigację po katalogach FTP z poziomu aplikacji.

Jonathan Wood
źródło
1

Po wielu badaniach w tej samej sprawie stwierdziłem, że ten jest niezwykle wygodny: https://github.com/flagbug/FlagFtp

Na przykład (spróbuj zrobić to ze standardową "biblioteką" .net - będzie to naprawdę trudne) -> Rekurencyjne pobieranie wszystkich plików na serwerze 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);
        }
    }
Stephan
źródło
flagftp używa wywołań klienta ftp systemu Windows. Nie jest to ani dobre, ani złe, ale oznacza to, że biblioteka jest podatna na te same błędy, które mogą wywoływać wywołania ftp w systemie Windows
John Mott