第 八 章 使 用 FTP 控 件
FT P 是 F ile T ra n s fe r P ro toc o l的 缩 写 意 为 文 件 传 输 协 议 用 于 在 In te rn e t上 传输 文 本 和 二 进 制 文 件 由 于 FT P 的 应 用 非 常 广 泛 现 在 流 行 的 W W W 浏 览 器如 IE N e ts c a p e 都 支 持 FT P 协 议 也 就 是 说 浏 览 器 就 是 一 个 简 单 的 FT P 客户 程 序 此 外 专 业 的 FT P 客 户 程 序 也 很 多 比 较 著 名 的 是 Cu te F T P G e t R ight 等 更 值 得 一 提 的 是 W ind ow s 95 已 经 把 FT P 作 为 一 项 标 准 的 功 能 集 成 到 操作 系 统 中 用 户 只 要 运 行 FT P 命 令 就 可 以 得 到 FT P > 提 示 符 然 后 就 可 以象 使 用 DOS 命 令 那 样 进 行 FT P 的 操 作
不 过 本 章 并 不 是 教 您 如 何 使 用 这 些 现 成 的 工 具 软 件 而 是 要 讲 述 怎 样 在应 用 程 序 中 实 现 FT P 协 议 换 句 话 说 就 是 自 己 写 FT P 客 户 程 序 FT P 协 议本 身 是 很 复 杂 的 幸 运 的 是 C+ + Bu ild e r 3 引 进 了 N e t M a n a g e 公 司 的 一 个A c tiv e X 控 件 C+ + 的 类 名 叫 TN M F T P 下 面 我 们 将 详 细 介 绍 TN M F TP 的 特性 方 法 和 事 件 读 者 重 点 要 掌 握 如 何 登 录 到 FT P 服 务 器 上 如 何 得 到 和 显示 FT P 服 务 器 上 的 目 录 如 何 从 FT P 服 务 器 下 载 文 本 文 件 和 二 进 制 文 件 如何 把 本 地 磁 盘 中 的 文 本 文 件 和 二 进 制 文 件 上 载 到 FT P 服 务 器
1 FT P 控 件 的 特 性
B y te s R ecv d 特 性
声 明 prope r ty B y te s R e c vd: long in t;
这 个 特 性 返 回 已 收 到 的 字 节 数 与 B y te s T o ta l特 性 配 合 使 用 可 以 显 示 文 件 下载 的 进 度 程 序 示 例 如 下
v o id _ fa s tc a ll T F o rm 1 ::N M F T P 1 P a c k e tR e c v d ( T O b je c t * S e n d e r )
{
…
S ta tu s B a r1 -> S im p le T e x t = In t T o S tr(N M F T P 1 -> B y te s R e c v d )+ " b y te s o f " + In tT o S tr( N M F T P 1 -> B y te s T o ta l)+ " re c e iv e d " ;
}
By te s S e n t 特 性
声 明 prope r ty B y te s S e n t: long in t;
这 个 特 性 返 回 已 发 出 的 字 节 数 与 B y te s T o ta l特 性 配 合 使 用 可 以 显 示 文 件 上载 的 进 度 程 序 示 例 如 下
v o id _ fa s tc a ll T F o rm 1 ::N M F T P 1 P a c k e tS e n t( T O b je c t * S e n d e r )
{
S ta tu s B a r1 -> S im p le T e x t = In t T o S tr(N M F T P 1 -> B y te s S e n t)+ " by te s of " + In tT oS tr ( N M F T P 1-> B y te s T o ta l)+ " s e n t" ;
}
B y te s Tota l 特 性
声 明 prope r ty B y te s T o ta l : long in t;
这 个 特 性 返 回 此 次 下 载 或 上 载 总 共 要 传 输 的 字 节 数 与 B y te s R ecv d 特 性 或
B y te s S e n t特 性 配 合 使 用 可 以 显 示 传 输 的 进 度
C u rren t D ir 特 性
声 明 prope r ty C u r re n tD ir : s tr ing;
这 个 特 性 返 回 FT P 服 务 器 上 的 当 前 目 录 程 序 示 例 如 下
vo id _ fa s tc a l l T F orm 1 : : N M F T P 1 S uc c e ss ( T C m dT y p e T ra n s _ T y p e )
{
s w i tc h ( T ra n s _T y p e ) {
c a s e c m dC ha nge D ir :
S ta tus B a r 1 -> S im p le T e xt = " C ha ng e D ir s u c c e ss " ; F o rm 1 . C a p tio n = N M F T P 1 -> C u r re n tD ir;
bre a k;
cas e c m d M a k eD ir : S tatu s B a r 1 -> S im p le T e x t = " M ak eD ir su cc es s " ; b reak ; cas e c m d D e lete: S tatu s B a r 1 -> S im p le T e x t = " D elete su cc es s " ; b reak ;
c a s e c m dR e m ove D ir : S ta tus B a r 1 -> S im p le T e xt = " R e m ove D ir s u c c e s s " ; b re a k ; c a s e c m d L is t: S ta tu s B a r 1 -> S im p le T e x t = " L is t s u c c e s s " ; b re a k ;
cas e c m d R en am e: S tatu s B a r 1 -> S im p le T e x t = " R en am e s u cc es s " ; b reak ;
cas e c m d U p R es to re : S tatu s B a r 1 -> S im p le T e x t = " U p lo a d R e s to re su cc es s " ; b rea k ; cas e c m d D o w n R es to re :
S tatu s B a r 1 -> S im p le T e x t= " D o w n lo ad R e s to re s u c cess " ; bre a k;
c a s e c m dD ow n loa d: S ta tus B a r 1 -> S im p le T e xt = " D ow n lo a d su c c e s s " ; b re a k; c a s e c m dU p lo a d: S ta tus B a r 1 -> S im p le T e xt = " U p loa d s u c c e s s " ; bre a k;
c a s e c m dA pp e n d: S ta tus B a r 1 -> S im p le T e xt = " U p loa d A p p e nd su c c e s s " ; b re a k; c a s e c m d R e In it: S ta tu s B a r 1 -> S im p le T e x t = " R e In it s u c c e s s " ; b re a k ;
cas e c m d A l lo ca te: S tatu s B a r 1 -> S im p le T e x t = " A l lo c a te s u cce ss " ; b re a k ; cas e c m d N L is t : S tatu s B a r 1 -> S im p le T e x t = " N L is t s u cce s s " ; b re a k ;
c a s e c m dD oC o m m a nd: S ta tus B a r 1 -> S im p le T e xt = " D oC om m a nd s u c c e s s" ; b re a k; d e fa u lt: S h o w M e s sa g e (" U n re c o g n iz e d c o m m a n d su c c e s s ." ) ; b re a k ;
}
}
H o s t 特 性
声 明 prope r ty H o s t: S tr ing;
这 个 特 性 用 于 指 定 FT P 服 务 器 的 主 机 名 或 IP 地 址 如 127 .0 .0 .1 程 序 示 例 如下
v o id _ fa s tc a ll T F o rm 1 ::B u tto n 1 C lic k ( T O b je c t * S e n d e r )
{
N M F T P 1 -> R e port L e v e l = S ta tus _B a s ic ;
if (C h e c k B o x 1 -> C h e c k e d )
{
N M FT P1 -> P roxy = E d i t 6 -> T e x t ;
N M FT P1 -> P roxy Po r t = S tr T o In t( E d it 7 -> T e x t) ;
}
NM F T P 1 -> H o s t = H o s t T x t-> T e x t ;
N M FT P1 -> Po r t = S tr T o In t( P o r t T x t-> T e x t) ; NM F T P 1 -> U s e r ID = U s e r T x t-> T e x t ;
N M FT P1 -> Pa s s w o rd = Pa s s T x t-> T e x t ; N M FT P1 -> C o n n e c t( ) ;
}
这 个 程 序 用 一 个 复 选 框 让 用 户 选 择 是 否 要 使 用 代 理 服 务 器 如 需 要 用 代 理服 务 器 就 把 P ro x y 特 性 设 为 代 理 服 务 器 的 IP 地 址 P rox y P ort特 性 设 为 代 理服 务 器 的 端 口 号
Lo c a l I P 特 性
声 明 prope r ty : L o c a l IP : S tr ing;
这 个 只 读 的 特 性 以 点 分 法 的 形 式 返 回 本 地 计 算 机 的 IP 地 址 如 果 本 地计 算 机 有 多 个 IP 地 址 这 个 特 性 返 回 其 中 的 第 一 个 程 序 示 例 如 下
v o id _ fa s tc a ll T F o rm 1 ::B u tto n 1 C lic k ( T O b je c t * S e n d e r )
{
S h o w M e s sag e(" 您的计算 机的 IP 地址是 " + N M F T P 1 -> L o c a l IP );
}
Pa s sw o r d 特 性
声 明 prope r ty P a s s w ord: s tr ing;
登 录 到 FT P 服 务 器 的 时 候 需 要 给 出 用 户 名 和 口 令 ( 通 常 是 您 的 E
- m a il地 址 )
这 个 特 性 用 于 给 出 口 令
Po r t 特 性
声 明 prope r ty P o r t: in te ge r ;
这 个 特 性 用 于 指 定 FT P 服 务 器 的 端 口 号 默 认 是 21 因 为 FT P 是 标 准 服 务
P ro x y 特 性
声 明 prope r ty P roxy : S tr ing;
这 个 特 性 用 于 指 定 代 理 服 务 器 的 主 机 名 或 IP 地 址 如 果 不 需 要 用 代 理 服 务器 这 个 特 性 必 须 空 着
P rox y P or t 特 性
声 明 prope r ty P roxy P o r t : in te ge r ;
这 个 特 性 用 于 指 定 代 理 服 务 器 的 端 口 号 如 果 不 用 代 理 服 务 器 这 个 特 性必 须 空 着
R e m o te I P 特 性
声 明 prope r ty R e m o te IP : s tr ing ;
这 个 特 性 返 回 以 点 分 法 表 示 的 FT P 服 务 器 的 IP 地 址 程 序 示 例 如 下
v o id _ fa s tc a ll T F o rm 1 ::B u tto n 1 C lic k ( T O b je c t * S e n d e r )
{
S h o w M e s sag e(" 当前连接 的是 : " + N M F T P 1 -> R e m o te IP );
}
R e p ly N u m be r 特 性
声 明 p ro p e r ty R e p ly N u m b e r : S m a llin t;
这 个 只 读 的 特 性 返 回 FT P 服 务 器 响 应 客 户 请 求 的 应 答 代 码 程 序 示 例 如 下
vo id _ fa s tc a l l T F orm 1 : : N M F T P 1 S ta tu s ( T C om pon e n t *S e n d e r , A n s i S tr in g S ta tus )
{
if ( S ta tu s B a r 1 ) S ta tu s B a r 1 -> S im p le T e x t = S ta tu s ; if ( N M F T P 1 ->R e p ly N u m b e r = = 53 0 )
S how M e s sa g e (" R e q u e s te d a c t ion no t ta k e n " ) ;
}
R e p o r t L e v e l 特 性
声 明 prope r ty R e po r t L e ve l : in te ge r ;
这 个 特 性 用 于 指 定 状 态 信 息 的 详 细 程 度 可 以 设 为 以 下 值 S ta tu s _N one S ta tu s _In form a t iona l S tatu s _ B as ic S ta tus _R ou tin e s S ta tu s _D e bug
S ta tu s _ T ra c e
S ta tu s 特 性
声 明 prope r ty S ta tus : S tr ing;
这 个 特 性 返 回 当 前 的 状 态 信 息
T im e o u t 特 性
声 明 prope r ty T im e O u t: In te ge r ;
这 个 特 性 用 于 指 定 一 个 毫 秒 数 如 果 超 过 规 定 的 时 间 S o ck et没 有 响 应 就 触 发异 常
Tra n s a c tio n R e p ly 特 性
声 明 prope r ty T ra n s a c tionR e p ly : S tr ing;
这 个 特 性 返 回 上 一 次 命 令 的 执 行 结 果 程 序 示 例 如 下
v o id _ fa s tc a ll T F o rm 1 ::B u tto n 1 C lic k ( T O b je c t * S e n d e r )
{
NM F T P 1 -> D o C o m m a n d (" S YS T " ) ;
S h o w M e s sag e( N M F T P 1 -> T ran s a ctio n R e p ly ) ;
}
U s erI d 特 性
声 明 prope r ty U s e r ID : s tr ing;
这 个 特 性 用 于 给 出 用 户 名 因 为 有 的 FT P 服 务 器 需 要 给 出 用 户 名
- 2 F T P 控 件 的 方 法
Ab o r t 函 数
声 明 proc e dure A bort;
这 个 函 数 用 于 中 止 本 次 下 载 或 上 载 但 不 断 开 与 FT P 服 务 器 的 连 接
A llo c a te 函 数
声 明 proc e dure A llo c a te ( F i le S iz e : in te ge r ) ;
这 个 函 数 其 实 很 少 用 到 用 于 预 先 分 配 一 些 空 间 用 来 存 放 文 件 F ile S iz e 参数 指 定 空 间 的 大 小 以 字 节 数 为 单 位 程 序 示 例 如 下
v o id _ fa s tc a ll T F o rm 1 ::B u tto n 1 C lic k ( T O b je c t * S e n d e r )
{
in t F ile H a n d le ;
if ( F ile H a n d le = o p e n (" C :\\W IN N T \\S o u th P a rk .b m p " ,O _ R DONL Y | O _ B INA R Y ) != - 1 ) N M F T P 1 -> A llo c a te ( file le n g th ( F ile H a n d le ) ) ;
}
C h an ge D ir 函 数
声 明 proc e dure C h a nge D ir ( D ir N a m e : s tr ing);
这 个 函 数 请 求 FT P 服 务 器 改 变 当 前 目 录 为 D ire c to ry 参 数 指 定 的 目 录
C o n n ec t 函 数
声 明 proc e dure C o n n e c t;
这 个 函 数 很 重 要 用 于 登 录 到 FT P 服 务 器 H o s t Po r t U s e r ID 和 Pa ss w o rd
特 性 必 须 预 先 已 设 置
D e le te 函 数
声 明 proc e dure D e le te ( F ile N a m e : s tr ing);
这 个 函 数 在 FT P 服 务 器 上 删 除 由 F ile N a m e 参 数 指 定 的 文 件
D is c o n n ec t 函 数
声 明 proc e dure D is c onne c t;
这 个 函 数 断 开 与 FT P 服 务 器 的 连 接
D o C o m m a n d 函 数
声 明 proc e dure D o C o m m a nd( C o m m a ndS tr : s tr ing);
这 个 函 数 用 于 在 FT P 服 务 器 上 执 行 一 条 命 令 ( 由 C o m m a ndS tr参 数 指 定 ) 调 用了 这 个 函 数 后 一 般 要 访 问 T ran s a ctio n R ep ly 或 R e ply N u m be r特 性 取 得 执 行 的结 果
D o w n loa d 函 数
声 明 p ro c e d u re D o w n lo ad ( R em o teF ile, L o c a l F ile: s tr in g ) ;
这 个 函 数 用 于 从 FT P 服 务 器 下 载 由 R e m o te F ile 参 数 指 定 的 文 件 然 后 在 本 地以 L o c a l F ile 参 数 指 定 的 名 称 保 存 如 果 L o c a l F ile 参 数 设 为 空 表 示 名 称 不 变程 序 示 例 如 下
v o id _ fa s tc a ll T F o rm 1 ::B u tto n 6 C lic k ( T O b je c t * S e n d e r )
{
NM F T P 1 -> M o d e ( M ODE _ IM AGE ) ;
N M F T P 1 -> D o w n lo a d (" file .z ip " , " c :\\d o w n lo a d \ file .z ip " ) ;
}
D o w n load R e s tore 函 数
声 明 proc e dure D o w n lo a d R e s tore ( R e m o te F ile , L o c a l F ile : s tr ing);
TN M F TP 控 件 支 持 断 点 续 传 这 个 函 数 能 够 接 着 上 次 中 断 的 地 方 继 续 下 载
L is t 函 数
声 明 proc e dure L is t;
这 个 函 数 用 于 返 回 FT P 服 务 器 中 当 前 目 录 下 的 文 件 列 表 列 表 中 的 每 一 项 将触 发 O n L is t I te m 事 件 程 序 示 例 如 下
v o id _ fa s tc a ll T F o rm 1 ::N M F T P 1 L is tIte m ( A n s i S tr in g L is tin g )
{
M e m o1-> L in e s -> A d d( L is t ing);
}
M a k e D ir ecto r y 函 数
声 明 proc e dure M a ke D ire c to r y ( D ire c tory N a m e : s tr ing);
这 个 函 数 在 FT P 服 务 器 上 创 建 一 个 目 录 目 录 名 由 D ire c to ry 参 数 指 定
M o d e 函 数
声 明 proc e dure M ode ( T he M ode : in te ge r ) ;
这 个 函 数 用 于 设 置 传 输 模 式 设 为 M ODE _ A S C I I 表 示 按 文 本 块 的 方 式 传 输设 为 M ODE _ IM A GE 表 示 按 一 个 字 节 一 个 字 节 地 传 输 ( 图 像 )
N lis t 函 数
声 明 proc e dure N lis t;
这 个 函 数 用 于 返 回 当 前 目 录 中 的 文 件 名 列 表 列 表 中 的 每 一 项 将 触 发 O n L is t
事 件
R e in itia liz e 函 数
声 明 |
proc e dure R e in it ia l iz e ; |
||
---|---|---|---|
如 果 您 |
要 以 另 一 个 用 户 名 或 口 令 登 录 到 FT P 服 务 器 |
就 调 用 这 个 函 数 |
这 个 |
函 数 将 |
向 FT P 服 务 器 发 出 重 新 初 始 化 的 请 求 |
R e m o v e D ir 函 数
声 明 proc e dure R e m o v e D ir ( D ire c to r y N a m e : s tr ing);
这 个 函 数 在 FT P 服 务 器 中 删 除 由 D ire c to ry 参 数 指 定 的 目 录
R e n a m e 函 数
声 明 proc e dure R e na m e ( F ile n a m e , F ile na m e 2 : s tr ing);
这 个 函 数 把 FT P 服 务 器 当 前 目 录 中 的 一 个 文 件 换 名 F ile n a m e 参 数 是 原 来 的名 称 F ile n a m e 2 参 数 是 新 的 名 称
U p loa d 函 数
声 明 proc e dure U p lo a d ( L oc a l F i le , R e m o te F i le : s tr ing);
这 个 函 数 用 于 把 本 地 磁 盘 上 由 L o c a lF ile 参 数 指 定 的 文 件 上 载 到 FT P 服 务 器 的当 前 目 录 并 且 以 R e m o te F ile 参 数 指 定 的 名 称 保 存 如 果 R e m o te F ile 参 数 指定 的 文 件 已 存 在 原 先 的 文 件 将 被 覆 盖
U p load A p p e n d 函 数
声 明 proc e dure U p lo a d A ppe nd( L o c a l F ile , R e m o te F i le : s tr ing);
这 个 函 数 与 U p lo a d 函 数 相 似 不 同 的 是 如 果 R e m o te F ile 参 数 指 定 的 文 件 已存 在 上 载 的 文 件 将 添 加 在 原 先 这 个 文 件 的 后 面
U p load R e s tore 函 数
声 明 proc e dure U p lo a d R e s tore ( L o c a l F ile , R e m o te F ile : s tr ing; P o s ition: in te g e r ) ;
TN M F TP 控 件 支 持 断 点 续 传 这 个 函 数 能 够 接 着 上 次 中 断 的 地 方 继 续 上 载 P o s itio n 参 数 指 定 从 什 么 地 方 开 始 续 传 假 设 已 传 输 了 80 个 字 节 P o s itio n 参数 就 设 为 81
3 F T P 控 件 的 事 件
FT P 控 件 的 事 件 往 往 是 与 调 用 某 个 方 法 相 关 联 的 如 果 事 件 被 触 发 通 常 表示 调 用 成 功 您 可 以 在 处 理 事 件 的 句 柄 中 得 到 FT P 服 务 器 的 返 回 信 息
O n A u th e n tic a tio n F a ile d 事 件
声 明 prope r ty O n A u th e n tic a t ionF a i le d : T H a nd le r E v e n t;
其 中 T H an d ler E v en t是 这 样 声 明 的
T H a nd le r E v e n t = P roc e dure ( va r ha nd le d : boo le a n ) o f O b je c t ;
登 录 到 FT P 服 务 器 时 如 果 没 有 事 先 给 出 用 户 名 和 口 令 或 者 用 户 名 和 口 令是 非 法 的 将 会 触 发 这 个 事 件 更 正 了 错 误 后 如 果 把 H a nd le d 参 数 设 为 T ru e 将 再 登 录 一 遍
O n C o n n ec t 事 件
声 明 prope r ty O n C onne c t: T N o tif y E v e n t;
当 客 户 已 经 成 功 地 登 录 到 FT P 服 务 器 时 将 触 发 这 个 事 件
O n C o n n ectio n F a ile d 事 件
声 明 prope r ty O n C onne c tionF a ile d: T N o tify E ve n t;
当 客 户 试 图 登 录 到 FT P 服 务 器 失 败 时 将 触 发 这 个 事 件
O n C o n n e c tio n R e q u ire d 事 件
声 明 prope r ty O n C onne c tionR e q u ire d : T H a nd le r E v e n t;
FT P 控 件 的 大 部 分 函 数 只 能 在 已 连 接 到 FT P 服 务 器 上 时 才 是 有 意 义 的 如 果调 用 函 数 时 没 有 连 接 到 FT P 服 务 器 将 触 发 这 个 事 件 在 处 理 这 个 事 件 的 句柄 中 您 应 当 调 用 C onne c t 函 数 连 接 FT P 服 务 器 然 后 把 H a nd le d 参 数 设 为T ru e 程 序 示 例 如 下
vo id _ fa s tc a l l T F orm 1 : : N M E c h o1C o n ne c t io nR e q u ire d ( bo ol & h a nd le d )
{
A n s i S tr ing B o xC a p t ion; A n s i S tr ing B o xM s g ;
B oxC a p t ion = " C o n n e c t io n R e q u ire d " ;
B oxM s g = " C o n n e c t io n R e q u ire d . C o nn e c t? " ;
if ( M e s s a ge B o x ( 0, & B ox M sg [ 1 ], & B ox C a p tio n [ 1 ], M B _Y E S N O + M B _ IC ONE XC L A M A T IO N ) = = ID Y E S )
{
ha n d le d = true ;
N M FT P1 -> C o n n e c t( ) ;
}
}
O n D is c o nne c t 事 件
声 明 prope r ty O n D is c onne c t: T N o tif y E v e n t;
当 客 户 断 开 与 FT P 服 务 器 的 连 接 时 将 触 发 这 个 事 件 注 意 在 处 理 这 个 事 件的 句 柄 中 如 果 需 要 访 问 VC L 元 件 的 话 最 好 先 判 断 VC L 元 件 是 否 存 在程 序 示 例 如 下
v o id _ fa s tc a ll T F o rm 1 ::N M F T P 1 D is c o n n e c t( T O b je c t * S e n d e r )
{
if ( S ta tu s B a r 1 != 0 )
S tatu s B a r 1 -> S im p le T e x t = " D is co n n ecte d " ;
}
O n E r ro r 事 件
声明 property O n E rror: T O nE rrorE vent;
其中 T O nE rrorE vent是这样声明的
T O nE r ro r E ve nt = proc e dure ( S e nde r : T C om p one n t; E r rno: w o rd ; E r rm s g : s tr ing ); 如 果 连 接 或 传 输 数 据 时 出 错 将 触 发 这 个 事 件 其 中 E rrn o 参 数 和 E rrm s g 参数 分 别 返 回 错 误 编 号 和 错 误 的 简 短 描 述 程 序 示 例 如 下
vo id _ fa s tc a l l T F orm 1 : : N M F T P 1 E r ro r ( T C o m pon e n t *S e n d e r , W O R D E r rno, A n s i S trin g E rrm s g )
{
S h o w M e s sa g e (" E rro r " + In t T o S tr(E rrn o )+ " : " + E rrm s g );
}
O n F a ilu re 事 件
声 明 prope r ty O n F a ilure : T F a i lu re E v e n t;
其 中 T F ailu re E v en t是 这 样 声 明 的
T F a ilu re E v e n t = P roc e dure ( va r ha n d le d : boo le a n ; T ra n s _ T y pe : T C m d T y p e ) of O b ject;
当 调 用 TN M F TP 控 件 的 某 个 函 数 失 败 时 将 触 发 这 个 事 件 Cm d T y p e 参 数 表
明 调 用 的 是 哪 个 函 数 程 序 示 例 如 下
vo id _ fa s tc a l l T F orm 1 : : N M F T P 1 F a i lu re ( b ool & h a n d le d , T C m d T y pe T ra n s _ T y pe )
{
s w i tc h ( T ra n s _T y p e ) {
c a s e c m dC ha nge D ir : S ta tus B a r 1 -> S im p le T e xt = " C ha ng e D ir fa i lu re " ; bre a k; cas e c m d M a k eD ir : S tatu s B a r 1 -> S im p le T e x t = " M ak eD ir fa i lu re " ; b re a k ;
cas e c m d D e lete: S tatu s B a r 1 -> S im p le T e x t = " D elete fa i lu re " ; b re a k ;
…
d e fa u lt: S h o w M e s sa g e (" U n re c o g n iz e d c o m m a n d fa ile d ." ) ; b re a k ;
}
}
O n H o s t R e s o lv e d 事 件
声 明 prope r ty O n H o s t R e s o lv e d : T O nH os t R e s o lve d;
当 FT P 服 务 器 的 主 机 名 已 找 到 ( 域 名 解 析 ) 就 触 发 这 个 事 件 如 果 解 析 没 有 成功 将 触 发 O n Inva lidH os t事 件
O n I n v a lid H o s t 事 件
声 明 prope r ty O n Inva l idH os t: T H a nd le r E v e n t;
当 H o s t特 性 所 指 定 的 主 机 名 是 非 法 的 就 触 发 这 个 事 件
O n L ist Ite m 事 件
声 明 p ro p e r ty O n L is t I te m : T N M L is tIte m ;
其 中 T N M L is t Ite m 是 这 样 声 明 的
T N M L is t I te m = P roc e dure ( L is tin g : s tr ing) of O b je c t;
当 程 序 调 用 L is t函 数 或 NL is t函 数 时 每 检 索 到 一 个 文 件 就 会 触 发 这 个 事 件
L is tin g 参 数 就 是 检 索 到 的 项 对 于 L is t函 数 来 说 L is tin g 参 数 中 包 括 文 件 名长 度 修 改 日 期 和 文 件 属 性 对 于 NL is t 函 数 来 说 L is tin g 参 数 中 只 包 括 文件 名
O n P a ck et R e c v d 事 件
声 明 prope r ty O n P a c k e t R e c vd: T N o tif y E ve n t ;
在 文 件 下 载 过 程 中 每 收 到 一 个 数 据 块 就 会 触 发 这 个 事 件 在 处 理 这 个 事件 的 句 柄 中 您 可 以 用 B y te s T o ta l特 性 和 B y te s R e c v d 特 性 显 示 下 载 的 进 度
O n P a ck et S e n t 事 件
声 明 prope r ty O n P a c k e t S e n t: T N o tify E ve n t;
在 文 件 上 载 过 程 中 每 发 出 一 个 数 据 块 就 会 触 发 这 个 事 件 在 处 理 这 个 事件 的 句 柄 中 您 可 以 用 B y te s T o ta l特 性 和 B y te s R e c v d 特 性 显 示 上 载 的 进 度
O nS ta tu s 事 件
声 明 prope r ty O n S ta tus : T O nS ta tu s ;
其 中 TO n S ta tu s 是 这 样 声 明 的
T O nS ta tu s = proc e dure ( S e nde r : T C o m pone n t; S ta tu s : s tr ing ) of O b je c t;
每 次 当 FT P 服 务 器 返 回 状 态 信 息 时 将 触 发 这 个 事 件 S ta tu s 参 数 就 是 当 前 的状 态
O nSuc c e s s 事 件
声 明 prope r ty O n S u c c e s s : T S uc c e s s E ve n t;
其 中 T S uc c e s s E ve n t是 这 样 声 明 的
T S uc c e s s E ve nt = P roc e dure ( T ra n s _ T y pe : T C m d T y pe ) of O b je c t;
当 某 个 命 令 被 成 功 执 行 后 将 触 发 这 个 事 件 T ra n s _ T y p e 参 数 就 是 被 执 行 的 命令
O n Tr an s a c tio n S tar t 事 件
声 明 prope r ty O n T ra n s a c tionS ta r t : T N o tif y E v e n t;
当 程 序 调 用 诸 如 L is t D o w n lo a d D o w n lo a d R e s to re U p lo a d U p lo a d U n iq u e
U p lo a d A ppe nd U p lo a d R e s to re 等 函 数 开 始 传 输 数 据 时 将 触 发 这 个 事 件
O n Tr an s a c tio n S to p 事 件
声 明 prope r ty O n T ra n s a c tionS to p : T N o tif y E ve n t ;
当 程 序 调 用 了 诸 如 L is t D o w n lo a d D o w n lo a d R e s to re U p lo a d U p lo a d U n iq u e U p lo a d A ppe nd U p lo a d R e s to re 等 函 数 并 且 数 据 已 传 输 完 毕 时 将 触 发 这 个 事件
O n U nSup po r te d F u n c tio n 事 件
声 明 prope r ty O n U n S upporte dF unc tion: T U ns upporte dE ve n t;
当 程 序 调 用 某 个 函 数 而 FT P 服 务 器 不 支 持 该 项 命 令 时 就 会 触 发 这 个 事 件