Biblioteca FTP gratuita [cerrada]

94

¿Puede recomendar una biblioteca FTP gratuita (clase) para C #?

La clase debe estar bien redactada y tener un buen desempeño.

Josef Van Zyl
fuente

Respuestas:

74

Puede considerar FluentFTP , anteriormente conocido como System.Net.FtpClient .

Se publica bajo la licencia MIT y está disponible en NuGet (FluentFTP).

Erwin Mayer
fuente
6
¡¡¡GRACIAS!!! ¡Esto realmente funciona muy bien! enumera el directorio con la fecha y hora correcta :)))) ¡y es rápido! código de muestra: 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
Tenga en cuenta que las bibliotecas compiladas son para .NET 3, pero el código es trivial para convertir a 2.0
Deanna
3
También está disponible como paquete NuGet: System.Net.FtpClient
Jeroen K
1
Algo menos fácil (¿ahora?), En lugar de file.Download, Stream s = connection.OpenRead (filename)
Jeroen K
2
Es cierto, pero puede agregar fácilmente sus propios métodos de extensión para tener la misma sintaxis que antes. Aquí están los míos: pastebin.com/FiKMrH76
Erwin Mayer
20

¿Por qué no utiliza las bibliotecas que vienen con .NET framework? Http://msdn.microsoft.com/en-us/library/ms229718.aspx ?

EDITAR: abril de 2019 por https://stackoverflow.com/users/1527/ Esta respuesta ya no es válida. Microsoft respalda otras respuestas.

Fueron diseñados por Microsoft, que ya no recomienda que se utilicen:

No recomendamos que utilice la clase FtpWebRequest para nuevos desarrollos. Para obtener más información y alternativas a FtpWebRequest, consulte WebRequest no debe usarse en GitHub. ( https://docs.microsoft.com/en-us/dotnet/api/system.net.ftpwebrequest?view=netframework-4.7.2 )

¡La página 'WebRequest no debería usarse' a su vez apunta a esta pregunta como la lista definitiva de bibliotecas!

0fnt
fuente
3
No estoy 100% seguro, pero ¿esas clases no se vuelven a conectar en cada solicitud? Si ese es el caso, la actuación se resentiría ..
Peter
22
La FtpWebRequestclase solo funciona realmente para acciones FTP transaccionales simples que se pueden modelar en el patrón de solicitud / respuesta, como descargar o cargar archivos individuales. Es muy difícil usarlo para realizar tareas como crear una estructura de carpetas FTP o cargar y descargar en la misma sesión.
Dai
1
"Debería" es la palabra clave. Probablemente no valga la pena su tiempo para depurar ejemplos de FtpWebRequest que solo funcionan en sus pruebas unitarias.
CZahrobsky
1
Muy ... Componente incorrecto: no puede enumerar archivos o carpetas fácilmente, si proporciona una URL incorrecta, se ejecutará sin excepción, pero devolverá html con un mensaje: no encontré ningún archivo (por lo tanto, debe analizar ese html) ... Creo que microsoft puede dedicar algo de tiempo y crear una biblioteca normal y no esto ...
VikciaR
2
La documentación de MS docs.microsoft.com/en-us/dotnet/api/… dice que no se debe usar para nuevos proyectos y apunta a github.com/dotnet/platform-compat/blob/master/docs/DE0003.md que en puntos de giro a esta pregunta
Pete Kirkham
12

edtFTPnet es una biblioteca FTP de código abierto, rápida y gratuita para .NET, escrita en C #.

Bruce Blackshaw
fuente
7
El diseño anticuado del sitio no me da mucha confianza sobre la calidad de la biblioteca.
Jeroen K
1
Está bajo licencia LGPL. Entonces, si está desarrollando un producto / servicio comercial, está abriendo esa lata de gusanos de lo que puede hacer y lo que no puede, qué incluir, etc. Y múltiples respuestas sobre SO y otros dan opiniones diferentes al respecto. ..
Oleksii Vynnychenko
Soy uno de los desarrolladores de este software. Pensé en agregar que nunca hemos perseguido a nadie por violaciones de LGPL o incluso pensamos en buscar tales casos. La razón principal por la que elegimos esta licencia cuando la biblioteca se publicó por primera vez en 2003 fue que LGPL era una de las únicas licencias tan conocidas. Ahora hay muchas más opciones y probablemente deberíamos encontrar otra licencia que se adapte mejor a nuestro objetivo. Lo único que queremos asegurarnos es que nadie use nuestro software para crear un producto comercial que compita con él. ¿Alguien tiene sugerencias para una licencia menos onerosa?
HansA
1
Por cierto, si su personal legal alguna vez está preocupado por eso, puede comprar una licencia más liberal por $ 99. Ah, y también el sitio web se ha actualizado ahora :). El producto todavía está muy vivo, en parte porque es parte de otro producto muy exitoso, es decir, CompleteFTP. Gracias Oleksii por señalar este problema. Lo discutiremos.
HansA
7

Me gusta Alex FTPS Client, que está escrito por un MVP de Microsoft llamado Alex Pilotti. Es una biblioteca de C # que puede usar en aplicaciones de consola, Windows Forms, PowerShell, ASP.NET (en cualquier lenguaje .NET). Si tiene una aplicación multiproceso, tendrá que configurar la biblioteca para que se ejecute de forma sincrónica, pero en general, es un buen cliente que probablemente obtendrá lo que necesita.

Juan C
fuente
1

Acabo de publicar un articulo que presenta tanto una clase de cliente FTP como un control de usuario FTP.

Son simples y no muy rápidos, pero son muy fáciles de usar y todo el código fuente está incluido. Simplemente coloque el control de usuario en un formulario para permitir que los usuarios naveguen por directorios FTP desde su aplicación.

Jonathan Wood
fuente
1

Después de mucha investigación sobre el mismo problema, encontré que este era extremadamente conveniente: https://github.com/flagbug/FlagFtp

Por ejemplo (intente hacer esto con la "biblioteca" estándar .net - será un verdadero dolor de cabeza) -> Recuperar de forma recurrente todos los archivos en el servidor 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
fuente
flagftp utiliza las llamadas del cliente ftp de Windows. Esto no es algo bueno o malo, pero sí significa que la biblioteca es susceptible a los mismos errores que pueden producir las llamadas ftp de Windows
John Mott