用AppendFile命令判断能否删除FTP上的文件

 FTP:用APPE(AppendFile)命令判断能否删除FTP上的文件

MFC Code: http://files.cnblogs.com/zhaowd2001/FTPCommand51026.zip

需求:
    我们有个程序,需要判断能否删除FTP上的指定文件。例如:假设FTP服务器是13.187.78.144,FTP虚拟目录是temp, temp下有个文件是a.txt,登录得用户名是dongdong,口令是dong.

办法:
    我们的办法是用FTP的APPE来判断是否能修改a.txt,如果能修改的话,那么就能删除a.txt.

    FTP没有返回关于a.txt能否被删除的信息。

    一开始我们用FTP的重命名来把a.txt改名为其他名字(假设改为b.txt),如果修改成功,那么应该能删除a.txt.

    但是,如果同时考虑IIS 5 和Linux下的VSFTPD,问题有点复杂了。

    在IIS 5下面,如果a.txt的属性被设置成只读的,那么通过FTP的RNTO命令,你可以把a.txt随便改名成其它文件(例如b.txt),但是你不能通过FTP删除a.txt.

    在VSFTPD下面,如果a.txt所在的目录temp的属性被设置成只读的,那么你是不能通过FTP的RNTO命令把a.txt改名的。通过FTP删除a.txt也会失败。如果a.txt所在的目录temp可以读写,那么不论a.txt是否可读写,你都可以重命名或者删除a.txt。

结论:
    总之,用FTP的RNTO命令判断是否能删除a.txt会很狼狈,并且落个失败的下场。
    问题1:使用APPE命令的时候要先判断a.txt是否已经存在。如果a.txt不存在,并且你有写的权限的话,你会在FTP上生成一个新的a.txt文件。
    问题2:在发送APPE命令之前,必须发送PORT或PASV命令。
   
    除了APPE(AppendFile)命令,不知道你还有其它方法吗?有的话,请联系我zhaowd2001@yahoo.com.


 *****************************************测试报告***************************************

为了判断能否删除FTP上的文件,测试了不同的操作在Linux和Windows下的差别。

假设FTP上的文件名是 c.

rename to self :指用RNFR和RNTO命令,重命名一个文件到自身。执行RNFR c后立即执行 RNTO c

rename to tmp  :指用RNFR和RNTO命令,重命名文件到其它文件。执行RNFR c后立即执行 RNTO c.tmp

PASV AppendFile:指用APPE命令,添加0个字节到文件。先执行PASV,然后执行APPE c命令。

linux vsFTPd   :指使用linux下的vsFTPd服务器做为测试服务器。

windows 2000 iis :指使用windows 2000 iis 5做为FTP服务器。

linux 下的dire=r :表示目录权限用chmod a-w设置为只读。

linux 下的dire=rw:表示目录权限用chmod a+rw设置为可读写。

linux 下的file=rw:表示文件c的权限用chmod a+rw设置为可读写。

linux 下的file=r :表示文件c的权限用chmod a-w设置为只读。

windows下的dire right=r :表示给登录FTP的windows帐户赋予读FTP目录的权限。这和把目录的属性设置为read only不同。

windows下的dire right=rw:表示给登录FTP的windows帐户赋予读写FTP目录的权限。这和把目录的属性设置为read only不同。

windows下的file=normal  :表示把文件c的属性设置为Normal.也就是普通文件。

windows下的file=readonly:表示把文件c的属性设置为只读。这和权限不同。

下表是各种情况的测试结果,T代表成功,F代表失败。

 

linux vsFTPd

windows 2000 iis 5

dire=r
file=rw
dire=rw
file=rw
dire=r
file=r
dire=rw
file=r
dire right=r
file right=rw
dire right=r
file right=r
dire right=rw
file right=rw
dire right=rw
file right=r
file = normalfile = readonlyfile = normalfile = readonlyfile = normalfile = readonlyfile = normalfile = readonly
rename to selfTTTTFFF TTTT
rename to tmpFTFTFFF TTTT
PASV AppendFileTTFFTFF TFFF
deleteFTFTTFF TFTF

从上表可以看出,即使同时使用rename to self、rename to tmp和PASV AppendFile三种操作,也不能唯一的确定delete成功或失败。看来,要判断能否成功删除FTP上的文件,还是比较麻烦的。我还没有找出好的办法。

转载于:https://www.cnblogs.com/zhaowd2001/archive/2005/10/13/253844.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值