使用Delphi带的FTP控件删除服务器上的文件,该文件正在被使用(ASF格式影片,正在被点播)(100分)

  • 主题发起人 主题发起人 千中元
  • 开始时间 开始时间

千中元

Unregistered / Unconfirmed
GUEST, unregistred user!
没删除,也没报错。。
如果不能删除,如何获知该文件正在使用呢?
 
在onsuccss中处理就行,
 
按照标准的rfc协议,你可以捕捉一下代码:

COMMAND-REPLY CORRESPONDENCE TABLE

COMMAND SUCCESS FAIL
------- ------- ----
USER 230,330 430-432,500-505,507
PASS 230,331 430-432,500-507
ACCT 230 430-432,500-507
REIN 232,233 401,436,500-507
Secondary Reply 300
BYE 231,232 430-432,500-505,507
BYTE 200,331 500-507
SOCK 200,331 500-505,507
LSTN 255,331 500-507
TYPE 200,331 500-507
FORM 200,331 500-507
STRU 200,331 500-507
MODE 200,331 500-507

RETR 250,331 433,450,451,454,455,500-505,507,550
Secondary Reply 252 452
STOR 250,331 433,451,454,455,457,500-505,507,550
Secondary Reply 252 452,453
APPE 250,331 433,451,454,455,457,500-507,550
Secondary Reply 252 452,453
ALLO 200,331 500-507
REST 200,331 500-507
RNFR 200,331 433,450,451,455,500-507,550
RNTO 253,331 433,450,451,455,456,500-505,507,550
ABOR 201,202,331 500-507
>>>DELE 254,331 433,450,451,455,500-507,550
嗬嗬,就是这几个鸟。

LIST 250,331 433,450,451,454,455,457,500-507,550
Secondary Reply 252 452
NLST 250,331 433,450,451,454,455,457,500-507
Secondary Reply 252 452
STAT 100,110,150, 450,451,454,455,500-507,550
151,331
HELP 000,030,050, 500-507
331
MLFL 250,331 433,450,451,454,455,457,500-507
Secondary Reply 252 452,453
MAIL 331,350 433,450,451,455,500-507
Secondary Reply 256
NOOP 200 500-505,507
QUOT 200,331 500-507
NQUO 200 500-505,507

Spontaneous 0xx,300,301 400,401,434-436
Replies 251,255
 
据我所知,没有什么FTP控件能得到服务器上的文件是否被使用。
NMFtp虽然有OnSuccess和OnFailure事件,但是它返回的命令运行的结果,并不是执行的
结果,也就是说这个命令运行正常,但有没有得到所期待的结果它就不管了。
如果想知道有没有被删除,可能只有在调用了Delete后再查看一下还有没有这个文件。
 
比较丑,用了全局变量解决了。但是有如下问题:
try
DeleteOk:=True;
dFileName := Format('%d%.2d%s', [
DataModule3.adsProgram.fieldbyname('prg_id').AsInteger, i, FileExt]);
NMFTP1.Delete(dFileName);
NMFTP1.Nlist;
if (not DeleteOk) then
showmessage('可能由于节目文件'+dFileName+'正在点播等原因'#13#10'未能删除服务器上的该节目文件');
-----------问题所在!!!
except
continue;
end;
单步跟踪,
showmessage是执行了的,但是exe中居然不出现
 
据我的经验,百分百是Nlist的问题,如果你有自己的FTP服务器的话,可以看服务器的信息,
它运行了NList或是List后就不会再往下执行了,但不会报错,在服务器端也不会出错。
 
我以前也碰到这个问题,不过我那时把删除功能定在中间层上。呵。。。可能你的需求不同吧。
所以。。。我想知道有没有这种解决方法。
 
Nlist以后还向下执行的。
procedure TfmProgram.NMFTP1ListItem(Listing: string);
begin
if NewFile = Listing then FindOld := true; //上传之前判断是否已经有该文件名的旧文件
if dFileName=Listing then DeleteOK:=False; //删除以后判断该文件是否还存在
end;
----现在上传前判断的功能可以。删除以后的却不行
 
NewFile和dFileName就是定义的全局变量吧?
你是在删除之前Nlist了一次,然后在删除之后再NList了一次吧?
据我的经验,List或Nlist调用两次之后就会工作不正常了,你试试看吧。
 
多人接受答案了。
 
后退
顶部