forked from veis-lzf/freecplus
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path_ftp.h
124 lines (102 loc) · 5.13 KB
/
_ftp.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
/****************************************************************************************/
/* 程序名:_ftp.h,此程序是freecplus框架的ftp客户端工具的类的声明文件。 */
/* 作者:C语言技术网(www.freecplus.net) 日期:20190525。 */
/* */
/* freecplus开源许可协议正文如下: */
/* 版权所有 (c) 2008-2020,码农有道,C语言技术网(www.freecplus.net)。 */
/* 特此向任何得到本软件副本或相关文档的人授权:被授权人有权使用、复制、修改、 */
/* 合并、出版、发布、散布、再授权和/或贩售软件及软件的副本,及授予被供应人同等 */
/* 权利,只需服从以下义务: */
/* 在软件和软件的所有副本中都必须包含以上版权声明和本许可声明。 */
/* 如果违返,无论在本软件的使用上或其他买卖交易中是否涉及合同,都属于侵权行为, */
/* 我们保留追究的权利。 */
/* freecplus开源许可协议正文结束。 */
/****************************************************************************************/
#ifndef __FTP_H
#define __FTP_H
#include "_freecplus.h"
#include "ftplib.h"
class Cftp
{
public:
netbuf *m_ftpconn; // ftp连接句柄。
unsigned int m_size; // 文件的大小,单位:字节。
char m_mtime[21]; // 文件的修改时间,格式:yyyymmddhh24miss。
// 以下三个成员变量用于存放login方法登录失败的原因。
bool m_connectfailed; // 连接失败。
bool m_loginfailed; // 登录失败,用户名和密码不正确,或没有登录权限。
bool m_optionfailed; // 设置传输模式失败。
Cftp(); // 类的构造函数。
~Cftp(); // 类的析构函数。
void initdata(); // 初始化m_size和m_mtime成员变量。
// 登录ftp服务器。
// host:ftp服务器ip地址和端口,中间用":"分隔,如"192.168.1.1:21"。
// username:登录ftp服务器用户名。
// password:登录ftp服务器的密码。
// imode:传输模式,FTPLIB_PASSIVE是被动模式,FTPLIB_PORT是主动模式,缺省是被动模式。
bool login(const char *host,const char *username,const char *password,const int imode=FTPLIB_PASSIVE);
// 注销。
bool logout();
// 获取ftp服务器上文件的时间。
// remotefilename:待获取的文件名。
// 返回值:false-失败;true-成功,获取到的文件时间存放在m_mtime成员变量中。
bool mtime(const char *remotefilename);
// 获取ftp服务器上文件的大小。
// remotefilename:待获取的文件名。
// 返回值:false-失败;true-成功,获取到的文件大小存放在m_size成员变量中。
bool size(const char *remotefilename);
// 改变ftp服务器的当前工作目录。
// remotedir:ftp服务器上的目录名。
// 返回值:true-成功;false-失败。
bool chdir(const char *remotedir);
// 在ftp服务器上创建目录。
// remotedir:ftp服务器上待创建的目录名。
// 返回值:true-成功;false-失败。
bool mkdir(const char *remotedir);
// 删除ftp服务器上的目录。
// remotedir:ftp服务器上待删除的目录名。
// 返回值:true-成功;如果权限不足、目录不存在或目录不为空会返回false。
bool rmdir(const char *remotedir);
// 发送NLST命令列出ftp服务器的目录和文件名。
// remotedir:ftp服务器的目录名。
// listfilename:用于保存从服务器返回的目录和文件名列表。
// 返回值:true-成功;false-失败。
// 注意:如果列出的是ftp服务器当前目录,remotedir用"","*","."都可以,但是,不规范的ftp服务器可能有差别。
bool nlist(const char *remotedir,const char *listfilename);
// 从ftp服务器上获取文件。
// remotefilename:待获取ftp服务器上的文件名。
// localfilename:保存到本地的文件名。
// bCheckMTime:文件传输完成后,是否核对远程文件传输前后的时间,保证文件的完整性。
// 返回值:true-成功;false-失败。
// 注意:文件在传输的过程中,采用临时文件命名的方法,即在localfilename后加".tmp",在传输
// 完成后才正式改为localfilename。
bool get(const char *remotefilename,const char *localfilename,const bool bCheckMTime=true);
// 向ftp服务器发送文件。
// localfilename:本地待发送的文件名。
// remotefilename:发送到ftp服务器上的文件名。
// bCheckSize:文件传输完成后,是否核对本地文件和远程文件的大小,保证文件的完整性。
// 返回值:true-成功;false-失败。
// 注意:文件在传输的过程中,采用临时文件命名的方法,即在remotefilename后加".tmp",在传输
// 完成后才正式改为remotefilename。
bool put(const char *localfilename,const char *remotefilename,const bool bCheckSize=true);
// 删除ftp服务器上的文件。
// remotefilename:待删除的ftp服务器上的文件名。
// 返回值:true-成功;false-失败。
bool ftpdelete(const char *remotefilename);
// 重命名ftp服务器上的文件。
// srcremotefilename:ftp服务器上的原文件名。
// dstremotefilename:ftp服务器上的目标文件名。
// 返回值:true-成功;false-失败。
bool ftprename(const char *srcremotefilename,const char *dstremotefilename);
/* 以下三个方法如果理解不了就算了,可以不启用。 */
// 发送LIST命令列出ftp服务器目录中的文件。
// 参数和返回值与nlist方法相同。
bool dir(const char *remotedir,const char *listfilename);
// 向ftp服务器发送site命令。
// command:命令的内容。
// 返回值:true-成功;false-失败。
bool site(const char *command);
// 获取服务器返回信息的最后一条(return a pointer to the last response received)。
char *response();
};
#endif