最近业余时间在搞Qt,其中的一个功能是实现FTP的上传下载。
之前版本的Qt提供了一个FTP操作的类,但是5.x(4.x?)之后因为性能问题就弃用了。貌似CSDN上有人发帖问过这个问题,记得应该是put多大的文件时导致占用内存过大。现在Qt的官方手册推荐使用QNetworkAccessManager用于TCP/IP以及FTP的传输。说实话这玩意对于FTP的兼容并不好。于是想到了CURL。
网上关于CURL和libCURL的文章很多,但是用于FTP操作的文章大多数停留于试验性的代码。别的不说,忽略了一个比较重要的问题就是FTP的传输模式。
FTP有两种传输模式,ASCII和Binary,即TYPE A 和TYPE I。大家的文章里面都没有提到这个事情。我用libCURL主要是传输文本文件,所以这个问题一下就浮现出来了。
libCURL的下载什么的就不说了,到官网上找windows的包就可以,记得下载develop版本。
在QT里面使用动态库,首先要做的肯定是修改pro文件。
1 LIBS += C:\your-curl-lib-location\curl-7.34.0-devel-mingw32\lib\libcurldll.a2
3 INCLUDEPATH += C:\your-curl-lib-location\curl-7.34.0-devel-mingw32\include
首先指定静态库位置,接着指定include路径。这个没什么好说的。然后把curl路径下的bin目录中的dll拷贝到debug文件夹。否则run的时候会“莫名其妙”的停止。
这里使用的是CURL的easy借口(貌似网上的文章都是使用的这个)。
先来看下下载代码。
1 CURLcode ret;2 curl_global_init(C