delphi中,idftp怎样查找ftp服务器的是否存在一个文件,delphi – IDFTP DirExists和MakeDir...
如果TIdFTP.List()沒有引發(fā)異常,則FTP服務(wù)器很可能返回450回復(fù)代碼,這意味著“未采取請(qǐng)求的文件操作”. TIdFTP.InternalGet()(由TIdFTP.List(),TIdFTP.ExtListDir()和TIdFTP.Get()使用)不會(huì)將450視為錯(cuò)誤條件,因?yàn)槟承┓?wù)器(如愛立信交換機(jī)FTP)發(fā)送450時(shí)列出一個(gè)空的但存在的目錄的內(nèi)容,因此沒有要發(fā)送的列表數(shù)據(jù).但是,當(dāng)請(qǐng)求的目錄不存在時(shí),某些服務(wù)器會(huì)發(fā)送450. TIdFTP.List()不會(huì)嘗試區(qū)分.但是,如果TIdFTP.List()未引發(fā)異常,則可以查看TIdFTP.LastCmdResult屬性以在需要時(shí)手動(dòng)區(qū)分.
此外,您不能僅僅依賴于引發(fā)異常以表示該文件夾不存在的事實(shí).可能發(fā)生任何數(shù)量的可能錯(cuò)誤.您必須實(shí)際查看錯(cuò)誤并采取相應(yīng)措施,例如:
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 then
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;
更好的方法是:
> ChangeDir()直接到目標(biāo)目錄,看它是否失敗.如果是這樣,則開始向后遍歷路徑,為每個(gè)父目錄調(diào)用ChangeDir(),直到最終成功,然后使用MakeDir()和ChangeDir()返回路徑以根據(jù)需要?jiǎng)?chuàng)建缺少的子目錄.
>從路徑中的第一個(gè)目錄和ChangeDir()開始,然后List()它以查看是否存在下一個(gè)子文件夾,MakeDir()是否需要,然后是ChangeDir(),然后根據(jù)需要重復(fù)直到到達(dá)目標(biāo)目錄.
歡迎使用FTP.它不是一個(gè)非常有效的目錄管理協(xié)議.
總結(jié)
以上是生活随笔為你收集整理的delphi中,idftp怎样查找ftp服务器的是否存在一个文件,delphi – IDFTP DirExists和MakeDir...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 再谈长城汽车实名举报比亚迪,几个细节耐人
- 下一篇: 重庆卡勒汽车改装好不好?