delphi中,idftp怎样查找ftp服务器的是否存在一个文件,delphi – IDFTP DirExists和MakeDir...
如果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 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()直接到目標目錄,看它是否失敗.如果是這樣,則開始向后遍歷路徑,為每個父目錄調用ChangeDir(),直到最終成功,然后使用MakeDir()和ChangeDir()返回路徑以根據需要創建缺少的子目錄.
>從路徑中的第一個目錄和ChangeDir()開始,然后List()它以查看是否存在下一個子文件夾,MakeDir()是否需要,然后是ChangeDir(),然后根據需要重復直到到達目標目錄.
歡迎使用FTP.它不是一個非常有效的目錄管理協議.
總結
以上是生活随笔為你收集整理的delphi中,idftp怎样查找ftp服务器的是否存在一个文件,delphi – IDFTP DirExists和MakeDir...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 再谈长城汽车实名举报比亚迪,几个细节耐人
- 下一篇: 重庆卡勒汽车改装好不好?