2009-08-07 85 views
22

Tôi đang tìm một Thư viện FTP cho C++ để thực hiện các chức năng cơ bản của FTP như xác thực, thay đổi thư mục, tải lên tệp, v.v. nhưng dường như tôi không thể tìm thấy. Tôi đã tìm kiếm trên Google, Sourceforge và CodeProject (tốt, có một dự án FTP CLIENT hoàn chỉnh cho Win95 trong CodeProject, tuy nhiên tôi không cần toàn bộ máy khách ftp ..), nhưng tôi chỉ tìm thấy thư viện C# FTP.Thư viện FTP C++?

Các bạn có thể gợi ý cho tôi một câu hỏi hay không? hoặc có thể là một giải pháp thay thế?

Cảm ơn.

FYI: Microsoft Visual C++ 2008 Express Edition là IDE duy nhất của tôi, và tôi thích thư viện tĩnh biên dịch sẵn (* .lib) có thể được liên kết tĩnh (nếu có)

+0

Hãy nhìn vào http://www.codeproject.com/Articles/310530/Target-Eye-Revealed-part-Target-Eyes-Unique-Auto chứa chức năng FTP cơ bản –

Trả lời

18

Chỉ để thông báo cho những ai đang tìm kiếm một thư viện/lớp học C++ FTP tốt, tôi đã tìm thấy một ứng dụng rất tốt và dễ sử dụng. Sử dụng nó cũng dễ dàng như sử dụng thư viện C# FTP đã được thực hiện bởi nhiều người. Nếu bạn chưa thử một, dưới đây là mã mẫu:

nsFTP::CFTPClient ftpClient; 
nsFTP::CLogonInfo logonInfo("localhost", 21, "anonymous", 
             "[email protected]"); 

// connect to server 

ftpClient.Login(logonInfo); 

// get directory listing 

nsFTP::TSpFTPFileStatusVector list; 
ftpClient.List("/", list); 

// iterate listing 

for(nsFTP::TSpFTPFileStatusVector::iterator it=list.begin(); 
             it!=list.end(); ++it) 
    TRACE("\n%s", (*it)->Name().c_str()); 

// do file operations 

ftpClient.DownloadFile("/pub/test.txt", "c:\\temp\\test.txt"); 

ftpClient.UploadFile("c:\\temp\\test.txt", "/upload/test.txt"); 

ftpClient.RenameFile("/upload/test.txt", "/upload/NewName.txt"); 

ftpClient.Delete("/upload/NewName.txt"); 

// disconnect 

ftpClient.Logout();

http://www.codeproject.com/Articles/8667/FTP-Client-Class và tận hưởng!

Và nó là hoàn toàn được lập trình trong C++ với STL (không MFC)

Tôi xin lỗi để chuyển đổi câu trả lời cho bài này, bởi vì tôi nghĩ rằng đây là một giải pháp tốt hơn, thay vì sử dụng những cái mà viết bằng C .

+1

Đã xem xét nguồn và dùng thử - hoạt động chính xác như được quảng cáo. Được xây dựng trực tiếp trên ổ cắm, làm sạch C++ trong suốt. – Elemental

+2

Cách bạn hoạt động. Tôi đã sao chép tất cả các tệp vào dự án của mình và bao gồm FTPClient.h và tôi nhận được hàng triệu lỗi. Nóng để khắc phục điều đó? – Hooch

+0

Có vẻ như liên kết bị hỏng ... :-( – Nathan

9

libftp (mặc dù nó trong C)
ftplib (một lần nữa, có vẻ như C)
libCurl dường như có khả năng FTP.

Tìm việc triển khai C++ có thể khó khăn, nhưng việc gói một thư viện C trong các lớp C++ sẽ không khó nếu bạn thực sự cần một giao diện C++.

Chỉnh sửa: Chỉ thấy rằng bạn thích thư viện được biên dịch trước. Nếu đây là một yêu cầu tuyệt đối, có thể bạn sẽ phải sử dụng một thư viện C vì các vấn đề ABI sẽ nhiều khả năng có nghĩa là một thư viện C++ được biên dịch trước sẽ không hoạt động cho bạn.

+0

Để tham khảo, ftplib và libftp đều là GPL. libCurl mở nhiều hơn. –

+0

bây giờ ftplib đã chuyển sang * Artistic License 2.0 * với phiên bản mới nhất 4.0 – falkb

+0

ftplib không hoạt động vì một số lý do. Nó không biên dịch và không thực sự làm gì cả. – Kats

8

Hãy thử libCurl. Nó có các ràng buộc cho C++ (cURLpp) và 30 ngôn ngữ khác.

+0

Thẳng lên libCurl là những gì tôi đã sử dụng. Tôi đã xem qua trình bao bọc cpp, nhưng các giao diện C đơn giản cũng dễ sử dụng và có tài liệu tốt hơn. –

0

QT có một lớp QFtp mà có thể chứa tất cả các bạn cần.

+5

Đáng buồn thay, QFtp lỗi và không còn được hỗ trợ nữa. – atamanroman

+0

Chỉ cần một FYI - Tôi không biết về lỗi, nhưng tôi biết rằng QFtp KHÔNG hỗ trợ kết nối với máy chủ FTP trả về danh sách kiểu DOS để đáp ứng với lệnh LIST . –

+0

https://bugreports.qt-project.org/browse/QTBUG-19409 – x29a

2

Hãy xem Poco Project được phát hành theo giấy phép phần mềm tăng cường.

Chúng cung cấp triển khai FTP RFC 959. Bạn có thể thực hiện đăng nhập hoặc tải lên các tệp, thay đổi chế độ, v.v ... làm chức năng của lớp FTPSession.

Kính trọng,
Ovanes

T.B. Nó là một lib đa nền tảng, hoạt động trên Windows.

0

tôi nghĩ rằng wininet.h nên là đủ cho visual studio 2008

+1

Bạn có thể muốn xây dựng một ít trên th được đưa vào một số chi tiết :) – Caribou