使用VC连接ftp

来源:互联网 发布:ubuntu tar.gz 压缩 编辑:程序博客网 时间:2024/04/29 20:22

使用VC进行ftp的连接其实是一件非常简单的东东,但是要想做好确实不简单,下面我就从简单和不简单两部分进行说明

    简单的一面:

需要使用的头文件:#include <afxinet.h>
需要使用的类 CInternetSession CFtpConnection

首先 定义一个CInternetSession 类型变量,然后调用GetFtpConnection函数,获得一个CFtpConnection* 类型的指针,其参数无非是一些连接的地址,用户名,密码之类的,很简单
然后就直接可以调用CFtpConnection* 类型变量的如下成员函数进行ftp的操作了
SetCurrentDirectory 设置当前FTP目录
GetCurrentDirectory 获取此次连接的当前目录
GetCurrentDirectoryAsURL 获取作为URL的此次连接的当前目录
RemoveDirectory 从服务器移去指定目录
CreateDirectory 在服务器上构造一个目录
Rename 将服务器上的文件改名
Remove 从服务器上移去一个文件
PutFile 将一个文件放到服务器上
GetFile 从连接的服务器上获取一个文件
OpenFile 在连接的服务器上打开一个文件
Close 关闭与服务器的连接

但看这些够简单吧,几句话就基本讲完了ftp的所有功能,包括上传,下载,更换目录。

下面说一下复杂的一面
我们不禁会想
1我要列出当前ftp下的目录文件怎么办?
2我想现实文件下载和上传的进度怎么办?
3我想查找某一个文件怎么办?
4我要使用多线程有何注意事项?
下面一一回答


1我要列出当前ftp下的目录文件怎么办?
要列出当前目录下的所有文件和文件夹需要使用CFtpFileFind类,以下是一段伪代码
CFtpFileFind是一个文件查找的类
CString filepath = "/test_path/*.*"
CInternetSession m_base_session;
CFtpConnection* m_base_connnectine = m_base_session.GetFtpConnection(m_str_url, m_str_username);
CFtpFileFind   cFinder(m_base_connnectine);
int nOK = cFinder.FindFile(filepath);
while(nOK)  
{  
nOK = cFinder.FindNextFile();
//这里调用cFinder的各种函数,可以得到文件的文件名,大小,属性等等
}
cFinder.close();
需要注意,每一个CFtpFileFind在close之前不可在调用另外一个CFtpFileFind,因为一个CFtpConnection中只允许有一个CFtpFileFind的实体。

2我想现实文件下载和上传的进度怎么办?
那就只有使用CFtpConnection* 的open函数了,然后通过read固定大小,然后和CFtpFileFind查找到的结果,或者直接通过CInternetFile类获得的文件大小相比较即可得到当前下载进度

3我想查找某一个文件怎么办?
如同第一个问题的解决方法,只不过把*.*换成我们需要查找的文件就可以了。

如果有其他问题可以留言哈,或者联系我的邮箱 lihn1987@gmail.com

转自:http://hi.baidu.com/lihn1987/blog/item/84f69926ee74550f908f9dfc.html