Thư viện FTP miễn phí [đã đóng cửa]


94

Bạn có thể giới thiệu một (lớp) thư viện FTP miễn phí cho C #.

Lớp học phải được viết tốt và có hiệu suất tốt.

Câu trả lời:


74

Bạn có thể xem xét FluentFTP , trước đây được gọi là System.Net.FtpClient .

Nó được phát hành theo Giấy phép MIT và có sẵn trên NuGet (FluentFTP).


6
CẢM ƠN BẠN!!! Điều này thực sự hoạt động rất tốt! nó liệt kê thư mục với ngày giờ chính xác :)))) và nhanh chóng! mã mẫu: 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
Lưu ý rằng các thư viện biên soạn dành cho NET 3 nhưng mã là tầm thường để chuyển đổi đến 2,0
Deanna

3
Cũng có sẵn gói NuGet als: System.Net.FtpClient
Jeroen K

1
Hơi ít dễ dàng (bây giờ?), Thay vì file.Download, Suối s = connection.OpenRead (filename)
Jeroen K

2
Đúng, nhưng bạn có thể dễ dàng thêm các phương thức mở rộng của riêng mình để có cùng cú pháp như trước. Dưới đây là của tôi: pastebin.com/FiKMrH76
Erwin Mayer

20

Tại sao bạn không sử dụng các thư viện đi kèm với .NET framework: http://msdn.microsoft.com/en-us/library/ms229718.aspx ?

CHỈNH SỬA: Tháng 4 năm 2019 bởi https://stackoverflow.com/users/1527/ Câu trả lời này không còn hợp lệ. Các câu trả lời khác được xác nhận bởi Microsoft.

Chúng được thiết kế bởi Microsoft, người không còn khuyến nghị rằng chúng nên được sử dụng:

Chúng tôi khuyên bạn không nên sử dụng lớp FtpWebRequest để phát triển mới. Để biết thêm thông tin và các lựa chọn thay thế cho FtpWebRequest, hãy xem WebRequest không nên được sử dụng trên GitHub. ( https://docs.microsoft.com/en-us/dotnet/api/system.net.ftpwebrequest?view=netframework-4.7.2 )

Trang 'WebRequest không nên được sử dụng' lần lượt chỉ ra câu hỏi này là danh sách cuối cùng của các thư viện!


3
Tôi không chắc 100% nhưng các lớp đó không kết nối lại theo từng yêu cầu? Nếu đúng như vậy thì việc thực hiện sẽ phải chịu ..
Peter

22
Các FtpWebRequestlớp học chỉ thực sự làm việc cho đơn giản, hành động FTP giao dịch có thể được mô hình trên mô hình request / response, chẳng hạn như tải hoặc tải lên các tập tin cá nhân. Rất khó sử dụng nó để thực hiện các tác vụ như tạo cấu trúc thư mục FTP hoặc tải lên và tải xuống trong cùng một phiên.
Đài

1
"Nên" là từ tác. Có lẽ không đáng để bạn dành thời gian gỡ lỗi các ví dụ FtpWebRequest chỉ hoạt động trong các bài kiểm tra đơn vị của bạn.
CZahrobsky

1
Rất ... Thành phần xấu - bạn không thể dễ dàng liệt kê các tệp hoặc thư mục, nếu bạn cung cấp url xấu - nó sẽ chạy mà không có bất kỳ ngoại lệ nào, nhưng sẽ trả về html cùng với thông báo - Tôi không tìm thấy bất kỳ tệp nào (vì vậy, bạn cần phân tích rằng html) ... tôi nghĩ rằng microsoft có thể dành chút thời gian và tạo thư viện bình thường và không này ...
VikciaR

2
Tài liệu MS docs.microsoft.com/en-us/dotnet/api/… cho biết không sử dụng cho các dự án mới và trỏ đến github.com/dotnet/platform-compat/blob/master/docs/DE0003.md trong đó chuyển sang câu hỏi này
Pete Kirkham

12

edtFTPnet là một thư viện FTP mã nguồn mở, nhanh, miễn phí cho .NET, được viết bằng C #.


7
Thiết kế ngày tháng của trang web không khiến tôi tin tưởng lắm về chất lượng của thư viện.
Jeroen K

1
Nó theo giấy phép LGPL. Vì vậy, nếu bạn đang phát triển sản phẩm / dịch vụ thương mại, bạn đang mở hộp chứa những gì bạn có thể làm và những gì bạn không thể, những gì cần bao gồm, v.v. Và nhiều câu trả lời trên SO và những người khác đưa ra ý kiến ​​khác nhau về vấn đề đó. ..
Oleksii Vynnychenko

Tôi là một trong những nhà phát triển phần mềm này. Tôi nghĩ rằng tôi chỉ muốn nói rằng chúng tôi chưa bao giờ theo đuổi bất kỳ ai về các vi phạm LGPL hoặc thậm chí nghĩ rằng sẽ tìm kiếm bất kỳ trường hợp nào như vậy. Lý do chính mà chúng tôi chọn giấy phép này khi thư viện được xuất bản lần đầu tiên vào năm 2003 vì LGPL là một trong những giấy phép duy nhất được biết đến rộng rãi xung quanh. Hiện có nhiều lựa chọn hơn và có lẽ chúng ta nên tìm một giấy phép khác phù hợp hơn với mục tiêu của mình. Điều duy nhất chúng tôi muốn đảm bảo là không ai sử dụng phần mềm của chúng tôi để tạo ra sản phẩm thương mại cạnh tranh với nó. Có ai có đề xuất cho một giấy phép ít rắc rối hơn không?
HansA

1
Nhân tiện, nếu những người hợp pháp của bạn lo lắng về điều đó, bạn có thể mua một giấy phép tự do hơn với giá 99 đô la. Oh, và trang web cũng đã được cập nhật ngay bây giờ :). Sản phẩm vẫn còn rất nhiều, một phần vì nó là một phần của một sản phẩm rất thành công khác, tức là CompleteFTP. Cảm ơn Oleksii đã chỉ ra vấn đề này. Chúng ta sẽ thảo luận về nó.
HansA

7

Tôi thích Alex FTPS Client được viết bởi Microsoft MVP tên Alex Pilotti. Đó là thư viện C # mà bạn có thể sử dụng trong các ứng dụng Console, Windows Forms, PowerShell, ASP.NET (bằng bất kỳ ngôn ngữ .NET nào). Nếu bạn có một ứng dụng đa luồng, bạn sẽ phải định cấu hình thư viện để chạy đồng bộ, nhưng nhìn chung, một ứng dụng khách tốt có nhiều khả năng sẽ cung cấp cho bạn những gì bạn cần.



1

Tôi vừa đăng một bài báo trình bày cả lớp máy khách FTP và quyền kiểm soát người dùng FTP.

Chúng đơn giản và không nhanh, nhưng rất dễ sử dụng và tất cả mã nguồn đều được bao gồm. Chỉ cần thả quyền kiểm soát của người dùng vào một biểu mẫu để cho phép người dùng điều hướng các thư mục FTP từ ứng dụng của bạn.


1

Sau nhiều lần điều tra trong cùng một vấn đề, tôi thấy cái này cực kỳ tiện lợi: https://github.com/flagbug/FlagFtp

Ví dụ: (hãy thử làm điều này với "thư viện" .net tiêu chuẩn - đó sẽ là một vấn đề thực sự) -> Truy xuất đệ quy tất cả các tệp trên máy chủ 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 sử dụng các cuộc gọi máy khách Windows ftp. Đây không phải là tốt hay điều xấu nhưng nó có ý nghĩa rằng thư viện là nhạy cảm với các lỗi tương tự mà các cửa sổ ftp cuộc gọi có thể ném
John Mott
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.