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.

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).


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!


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 #.


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.



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.


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);
        }
    }

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.