Biblioteca FTP gratuita [fechada]

94

Você pode recomendar uma biblioteca FTP gratuita (classe) para C #.

A aula tem que ser bem escrita e ter bom desempenho.

Josef Van Zyl
fonte

Respostas:

74

Você pode considerar o FluentFTP , anteriormente conhecido como System.Net.FtpClient .

É lançado sob a licença MIT e disponível no NuGet (FluentFTP).

Erwin Mayer
fonte
6
OBRIGADO!!! Isso realmente funciona muito bem! ele lista o diretório com data e hora correta :)))) e é rápido! código de exemplo: 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 de
1
Observe que as bibliotecas compiladas são para .NET 3, mas o código é trivial para converter para 2.0
Deanna
3
Também está disponível como o pacote NuGet: System.Net.FtpClient
Jeroen K
1
Um pouco menos fácil (agora?), Em vez de file.Download, Stream s = connection.OpenRead (nome do arquivo)
Jeroen K
2
É verdade, mas você pode adicionar facilmente seus próprios métodos de extensão para ter a mesma sintaxe de antes. Aqui estão os meus: pastebin.com/FiKMrH76
Erwin Mayer
20

Por que você não usa as bibliotecas que vêm com o .NET framework: http://msdn.microsoft.com/en-us/library/ms229718.aspx ?

EDITAR: abril de 2019 por https://stackoverflow.com/users/1527/ Esta resposta não é mais válida. Outras respostas são endossadas pela Microsoft.

Eles foram desenvolvidos pela Microsoft, que não recomenda mais que sejam usados:

Não recomendamos que você use a classe FtpWebRequest para novos desenvolvimentos. Para obter mais informações e alternativas para FtpWebRequest, consulte WebRequest não deve ser usado no GitHub. ( https://docs.microsoft.com/en-us/dotnet/api/system.net.ftpwebrequest?view=netframework-4.7.2 )

A página 'WebRequest não deve ser usada', por sua vez, aponta para esta questão como a lista definitiva de bibliotecas!

0fnt
fonte
3
Não tenho 100% de certeza, mas essas classes não se reconectam a cada solicitação? Se for esse o caso, o desempenho seria prejudicado.
Peter
22
A FtpWebRequestclasse só funciona realmente para ações simples e transacionais de FTP que podem ser modeladas no padrão Solicitação / Resposta, como fazer download ou upload de arquivos individuais. É muito difícil usá-lo para realizar tarefas como criar uma estrutura de pasta FTP ou fazer upload e download na mesma sessão.
Dai
1
"Deveria" é a palavra-chave. Provavelmente não vale a pena depurar exemplos de FtpWebRequest que só funcionam em seus testes de unidade.
CZahrobsky
1
Muito ... Componente inválido - você não pode listar arquivos ou pastas facilmente, se fornecer url incorreto - ele será executado sem nenhuma exceção, mas retornará html com mensagem - Não encontrei nenhum arquivo (então, você precisa analisar esse html) ... Eu acho que a microsoft pode gastar algum tempo e criar uma biblioteca normal e não esta ...
VikciaR
2
A documentação da MS docs.microsoft.com/en-us/dotnet/api/… diz para não usar para novos projetos e aponta para github.com/dotnet/platform-compat/blob/master/docs/DE0003.md que em pontos de mudança para esta questão
Pete Kirkham
12

edtFTPnet é uma biblioteca FTP gratuita, rápida e de código aberto para .NET, escrita em C #.

Bruce Blackshaw
fonte
7
O design datado do site não me dá muita confiança sobre a qualidade da biblioteca.
Jeroen K de
1
Está sob licença LGPL. Então, se você está desenvolvendo um produto / serviço comercial, você está abrindo uma caixa de minhocas do que você pode fazer e do que não pode, o que incluir, etc. E várias respostas sobre SO e outros dão opiniões diferentes sobre esse assunto. ..
Oleksii Vynnychenko
Sou um dos desenvolvedores deste software. Pensei apenas em contribuir para o fato de que nunca perseguimos ninguém por violações de LGPL ou mesmo pensamos em procurar qualquer um desses casos. A principal razão pela qual escolhemos esta licença quando a biblioteca foi publicada pela primeira vez em 2003 foi que LGPL era uma das únicas licenças amplamente conhecidas ao redor. Existem muito mais opções agora e provavelmente deveríamos encontrar outra licença que melhor se adapte ao nosso objetivo. A única coisa que queremos garantir é que ninguém use nosso software para criar um produto comercial que concorra com ele. Alguém tem sugestões para uma licença menos onerosa?
HansA
1
A propósito, se o seu pessoal jurídico estiver preocupado com isso, você pode simplesmente comprar uma licença mais liberal por $ 99. Ah, e também o site foi atualizado agora :). O produto ainda está muito vivo, em parte porque é parte de outro produto de muito sucesso, o CompleteFTP. Obrigado Oleksii por apontar este problema. Vamos discutir isso.
HansA
7

Eu gosto do Alex FTPS Client, que é escrito por um MVP da Microsoft chamado Alex Pilotti. É uma biblioteca C # que você pode usar em aplicativos de console, Windows Forms, PowerShell, ASP.NET (em qualquer linguagem .NET). Se você tiver um aplicativo multithread, terá que configurar a biblioteca para funcionar de forma síncrona, mas no geral é um bom cliente que provavelmente fornecerá o que você precisa.

John C
fonte
1

Acabei de postar um artigo que apresenta uma classe de cliente FTP e um controle de usuário FTP.

Eles são simples e não são muito rápidos, mas são muito fáceis de usar e todo o código-fonte está incluído. Basta soltar o controle do usuário em um formulário para permitir que os usuários naveguem nos diretórios FTP de seu aplicativo.

Jonathan Wood
fonte
1

Depois de muita investigação sobre o mesmo problema, achei este extremamente conveniente: https://github.com/flagbug/FlagFtp

Por exemplo (tente fazer isso com a "biblioteca" .net padrão - será uma dor real) -> Recuperando recursivamente todos os arquivos no 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
fonte
flagftp usa as chamadas do cliente ftp do Windows. Isso não é uma coisa boa ou ruim, mas significa que a biblioteca é suscetível aos mesmos erros que as chamadas de ftp do Windows podem lançar
John Mott