delphi – IDFTP DirExists和MakeDir

delphi – IDFTP DirExists和MakeDir,第1张

概述我正在使用Indy IDFTP来创建目录.我需要找到一种可靠的方法来确定目录是否存在以及它是否存在,以便调用MakeDir.我尝试了以下代码,但是在调用List时没有发生异常,因此即使当时目录不存在,MakeDir也没有执行.如何确定目录是否存在并创建目录(如果该目录不存在)? { Check to see if the '/public_html/XXX/' + iDomain + 'Thumb @H_419_1@ 我正在使用Indy IDFTP来创建目录.我需要找到一种可靠的方法来确定目录是否存在以及它是否存在,以便调用MakeDir.我尝试了以下代码,但是在调用List时没有发生异常,因此即使当时目录不存在,MakeDir也没有执行.如何确定目录是否存在并创建目录(如果该目录不存在)?

{ Check to see if the '/public_HTML/XXX/' + IDomain + 'thumbnails' directory exists }    try      IDFTP1.List(nil,'/public_HTML/XXX/' + IDomain + 'thumbnails',False);    except      on e: EIDReplyRFCError do      begin        { '/public_HTML/XXX/' + IDomain + 'thumbnails' directory does not exist }        Statusbar1.SimpleText := 'Making thumbnail directory...';        Statusbar1.Update;        iFolder := '/public_HTML/XXX/' + IDomain;        { Change directory to /public_HTML/XXX/IDomain }        IDFTP1.ChangeDir(iFolder);        iFolder := 'thumbnails';        { Create FTP Directory for thumbnails }        IDFTP1.MakeDir(iFolder);      end;    end;

在我测试期间,目录不存在,但在运行时e是零?我的方法是否正确?

解决方法 如果TIDFTP.List()没有引发异常,则FTP服务器很可能返回450回复代码,这意味着“未采取请求的文件 *** 作”. TIDFTP.InternalGet()(由TIDFTP.List(),TIDFTP.ExtListDir()和TIDFTP.Get()使用)不会将450视为错误条件,因为某些服务器(如爱立信交换机FTP)发送450时列出一个空的但存在的目录的内容,因此没有要发送的列表数据.但是,当请求的目录不存在时,某些服务器会发送450. TIDFTP.List()不会尝试区分.但是,如果TIDFTP.List()未引发异常,则可以查看TIDFTP.LastCmdResult属性以在需要时手动区分.

此外,您不能仅仅依赖于引发异常以表示该文件夹不存在的事实.可能发生任何数量的可能错误.您必须实际查看错误并采取相应措施,例如:

var  Exists: Boolean;try  IDFTP1.List(nil,False);  Exists := True;  if IDFTP1.LastCmdResult.NumericCode = 450 then  begin    if (IDFTP1.LastCmdResult.Text.Text has a message like 'No such file or directory' or similar) then begin      Exists := False;    end;    // look for other possible text messages...  end;except  on e: EIDReplyRFCError do  begin    if (e.ErrorCode <> 550) or (e.Message does not have a message like 'Directory not found' or similar) then begin      raise;    end;    Exists := false;  end;end;if not Exists thenbegin  { '/public_HTML/XXX/' + IDomain + 'thumbnails' directory does not exist }  Statusbar1.SimpleText := 'Making thumbnail directory...';  Statusbar1.Update;  iFolder := '/public_HTML/XXX/' + IDomain;  { Change directory to /public_HTML/XXX/IDomain }  IDFTP1.ChangeDir(iFolder);  iFolder := 'thumbnails';  { Create FTP Directory for thumbnails }  IDFTP1.MakeDir(iFolder);end;

更好的方法是:

> ChangeDir()直接到目标目录,看它是否失败.如果是这样,则开始向后遍历路径,为每个父目录调用ChangeDir(),直到最终成功,然后使用MakeDir()和ChangeDir()返回路径以根据需要创建缺少的子目录.
>从路径中的第一个目录和ChangeDir()开始,然后List()它以查看是否存在下一个子文件夹,MakeDir()是否需要,然后是ChangeDir(),然后根据需要重复直到到达目标目录.

欢迎使用FTP.它不是一个非常有效的目录管理协议.

总结

以上是内存溢出为你收集整理的delphi – IDFTP DirExists和MakeDir全部内容,希望文章能够帮你解决delphi – IDFTP DirExists和MakeDir所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1248947.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存