Perpustakaan FTP Gratis [ditutup]

95

Dapatkah Anda merekomendasikan perpustakaan FTP gratis (kelas) untuk C #.

Kelas harus ditulis dengan baik, dan memiliki kinerja yang baik.

Josef Van Zyl
sumber

Jawaban:

75

Anda dapat mempertimbangkan FluentFTP , sebelumnya dikenal sebagai System.Net.FtpClient .

Ini dirilis di bawah Lisensi MIT dan tersedia di NuGet (FluentFTP).

Erwin Mayer
sumber
6
TERIMA KASIH!!! Ini benar-benar bekerja dengan sangat baik! itu mencantumkan direktori dengan waktu tanggal yang benar :)))) dan cepat! kode contoh: 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
Perhatikan bahwa pustaka yang dikompilasi adalah untuk .NET 3 tetapi kodenya mudah untuk diubah menjadi 2.0
Deanna
3
Apakah juga tersedia paket NuGet: System.Net.FtpClient
Jeroen K
1
Agak kurang mudah (sekarang?), Alih-alih file.Download, Stream s = connection.OpenRead (nama file)
Jeroen K
2
Benar, tetapi Anda dapat dengan mudah menambahkan metode ekstensi Anda sendiri agar memiliki sintaks yang sama seperti sebelumnya. Ini milik saya: pastebin.com/FiKMrH76
Erwin Mayer
20

Mengapa Anda tidak menggunakan pustaka yang disertakan dengan kerangka .NET: http://msdn.microsoft.com/en-us/library/ms229718.aspx ?

EDIT: 2019 April oleh https://stackoverflow.com/users/1527/ Jawaban ini tidak lagi valid. Jawaban lain didukung oleh Microsoft.

Mereka dirancang oleh Microsoft yang tidak lagi merekomendasikan bahwa mereka harus digunakan:

Kami tidak menyarankan Anda menggunakan kelas FtpWebRequest untuk pengembangan baru. Untuk informasi selengkapnya dan alternatif selain FtpWebRequest, lihat WebRequest tidak boleh digunakan di GitHub. ( https://docs.microsoft.com/en-us/dotnet/api/system.net.ftpwebrequest?view=netframework-4.7.2 )

Halaman 'WebRequest tidak boleh digunakan' pada gilirannya menunjuk ke pertanyaan ini sebagai daftar perpustakaan yang pasti!

0fnt
sumber
3
Saya tidak 100% yakin tetapi bukankah kelas-kelas itu terhubung kembali pada setiap permintaan? Jika itu masalahnya maka kinerja akan menderita ..
Peter
22
The FtpWebRequestkelas hanya benar-benar bekerja untuk sederhana, tindakan FTP transaksional yang dapat dimodelkan pada pola Permintaan / Response, seperti men-download atau meng-upload file individual. Sangat sulit menggunakannya untuk melakukan tugas-tugas seperti membuat struktur folder FTP atau mengunggah dan mengunduh dalam sesi yang sama.
Dai
1
"Harus" adalah kata kunci. Mungkin tidak sepadan dengan waktu Anda untuk men-debug contoh FtpWebRequest yang hanya berfungsi di pengujian unit Anda.
CZahrobsky
1
Sangat ... Komponen buruk - Anda tidak dapat dengan mudah membuat daftar file atau folder, jika Anda memberikan url yang buruk - ini akan berjalan tanpa terkecuali, tetapi akan mengembalikan html dengan pesan - Saya tidak menemukan file apa pun (jadi, Anda perlu parse html itu) ... Saya pikir microsoft dapat meluangkan waktu dan membuat perpustakaan normal dan bukan ini ...
VikciaR
2
Dokumentasi MS docs.microsoft.com/en-us/dotnet/api/… mengatakan jangan gunakan untuk proyek baru, dan menunjuk ke github.com/dotnet/platform-compat/blob/master/docs/DE0003.md yang ada di putar poin ke pertanyaan ini
Pete Kirkham
12

edtFTPnet adalah pustaka FTP gratis, cepat, dan open source untuk .NET, ditulis dalam C #.

Bruce Blackshaw
sumber
7
Desain bertanggal situs tidak memberi saya kepercayaan diri yang besar tentang kualitas perpustakaan.
Jeroen K
1
Ini di bawah lisensi LGPL. Jadi jika Anda mengembangkan produk / layanan komersial, Anda membuka kaleng cacing tentang apa yang dapat Anda lakukan dan apa yang tidak dapat Anda lakukan, apa yang harus disertakan, dll. Dan berbagai jawaban di SO dan lainnya memberikan pendapat yang berbeda tentang masalah tersebut. ..
Oleksii Vynnychenko
Saya salah satu pengembang perangkat lunak ini. Saya pikir saya hanya akan menambahkan bahwa kami tidak pernah mengejar siapa pun atas pelanggaran LGPL atau bahkan berpikir untuk mencari kasus semacam itu. Alasan utama kami memilih lisensi ini ketika perpustakaan ini pertama kali diterbitkan pada tahun 2003 adalah karena LGPL adalah satu-satunya lisensi yang dikenal secara luas. Ada lebih banyak pilihan sekarang dan kita mungkin harus mencari lisensi lain yang lebih sesuai dengan tujuan kita. Satu-satunya hal yang ingin kami pastikan adalah tidak ada yang menggunakan perangkat lunak kami untuk membuat produk komersial yang bersaing dengannya. Adakah yang punya saran untuk lisensi yang lebih ringan?
HansA
1
Ngomong-ngomong, jika orang-orang legal Anda pernah mengkhawatirkannya, Anda bisa membeli lisensi yang lebih liberal seharga $ 99. Oh, dan juga situs webnya telah diperbarui sekarang :). Produk tersebut masih sangat hidup, sebagian karena merupakan bagian dari produk lain yang sangat sukses, yaitu CompleteFTP. Terima kasih Oleksii untuk menunjukkan masalah ini. Kami akan membahasnya.
HansA
7

Saya suka Alex FTPS Client yang ditulis dengan nama Microsoft MVP Alex Pilotti. Ini adalah pustaka C # yang dapat Anda gunakan di aplikasi Konsol, Formulir Windows, PowerShell, ASP.NET (dalam bahasa .NET apa pun). Jika Anda memiliki aplikasi multithread, Anda harus mengonfigurasi perpustakaan untuk berjalan secara sinkron, tetapi secara keseluruhan klien bagus yang kemungkinan besar akan memberi Anda apa yang Anda butuhkan.

John C
sumber
1

Saya baru saja memposting artikel yang menyajikan kelas klien FTP dan kontrol pengguna FTP.

Mereka sederhana dan tidak terlalu cepat, tetapi sangat mudah digunakan dan semua kode sumber disertakan. Cukup jatuhkan kontrol pengguna ke formulir untuk memungkinkan pengguna menavigasi direktori FTP dari aplikasi Anda.

Jonathan Wood
sumber
1

Setelah banyak penyelidikan dalam masalah yang sama, saya menemukan yang ini sangat nyaman: https://github.com/flagbug/FlagFtp

Misalnya (coba lakukan ini dengan "library" .net standar - ini akan sangat merepotkan) -> Secara rekursif mengambil semua file di server 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
sumber
flagftp menggunakan panggilan klien ftp Windows. Ini bukan hal yang baik atau buruk tetapi itu berarti bahwa perpustakaan rentan terhadap kesalahan yang sama yang dapat dilakukan oleh panggilan ftp windows
John Mott