我想删除整个目录,在网上找到这样一段代码:
procedure TMainForm.DeleteAllFiles(var idFTP: TidFTP; RemoteDir, RootDir:
  string);
label
  Files;
var
  i, DirCount: integer;
  Temp: string;
  CurrentDir: string;
begin
  idFTP.ChangeDir(RemoteDir);
  CurrentDir := idFTP.RetrieveCurrentDir;
  if Pos(RootDir, idFTP.RetrieveCurrentDir) = 0 then
    Exit;
  Files:
  idFTP.List(nil);
  DirCount := idFTP.DirectoryListing.Count;
  while DirCount = 0 do begin
    Temp := idFTP.RetrieveCurrentDir;
    idFTP.ChangeDirUp;
    idFTP.RemoveDir(Temp);
    idFTP.List(nil);
    DirCount := idFTP.DirectoryListing.Count;
    for i := 0 to DirCount - 1 do
      if idFTP.DirectoryListing[i].FileName = RootDir then
        Exit;
  end;
  for i := 0 to DirCount - 1 do begin
    if Pos(RootDir, idFTP.RetrieveCurrentDir) = 0 then
      Break;
    if idFTP.DirectoryListing[i].ItemType = ditDirectory then begin
      DeleteAllFiles(idFTP, idFTP.DirectoryListing[i].FileName, RootDir);
    end
    else begin
      idFTP.Delete(idFTP.DirectoryListing[i].FileName);
      goto Files;
    end;
  end;
end;我是这么调用的:Name := IdFTP1.DirectoryListing.Items[DirectoryListBox.ItemIndex].FileName;
DeleteAllFiles(idFTP1,Name,Name);可是一用这个函数,就停不下来,好像死循环一样,不知道是不是我传递的参数不正确。哪位高人有删除目录的代码,或是帮我找出这段代码的错误吧。

解决方案 »

  1.   

    删除目录需要用FTP删除吗??   遍历文件夹 然后删除  用FindFirst FindNext FindClose来实现
      

  2.   

    是我没写明白,我要删除的是FTP服务器上的目录。
      

  3.   

    没看你写的代码,下面是我写的一个函数,有兴趣可以试下
    procedure TReportform.Delete(path: string);
      //删除文件
    var
      hFindFile:Cardinal;
      t,tfile:String;
      FindFileData:WIN32_FIND_DATA;
    begin
      ChDir(path);
      hFindFile:=FindFirstFile('*.*',FindFileData);
      if hFindFile<>INVALID_HANDLE_VALUE then //搜索到文件
      begin
        repeat
          tfile:=FindFileData.cFileName;
          if   (tfile='.')   or   (tfile='..')   then
            Continue
          else
          begin
            t:=path+'\'+tFile;
            DeleteFile(t);
          end;
          until   FindNextFile(hFindFile,FindFileData)=false;
            ///     FindClose(hFindFile);
      end;
    end;
      

  4.   

    RemoteDir, RootDir 分别是 要删除的目录 和要删除目录的上级目录 
    你的 DeleteAllFiles(idFTP1,Name,Name); 明显不对 后面一个该改成要删除目录的上级目录的绝对路径 可以通过changedirup 和idFTP.RetrieveCurrentDir查出来
      

  5.   

    唉……
    是那个过程中的语句有错误,我还是没找出来,按“zzzzzllllll() ”的说法也不行,时间长了,结下贴吧,谢谢了。
      

  6.   

    可是一用这个函数,就停不下来,好像死循环一样,不知道是不是我传递的参数不正确。
    =======================================================================
    是不是ftp下有'.','..'這兩個是刪不掉的,所以象死機一樣退不出來呀.----------------------------------
    goto Files;從來沒用過goto...不明白.呵呵.
    自已做吧,不難的.
      

  7.   

    procedure FTP_DeleteAllFiles(var idFTP: TIdFtp; RemoteDir, RootDir: string);
    type
      TFtpDir = record
        FileName: string;
        ItemType: TIdDirItemType;
      end;var
      i, DirCount: integer;
      ftpDir: array of TFtpDir;begin
      if RootDir = '/' then exit;
      if Pos(RootDir, RemoteDir) = 0 then exit;  idFTP.ChangeDir(RemoteDir);
      idFTP.List(nil);
      DirCount := idFTP.DirectoryListing.Count;
      SetLength(ftpDir, DirCount);
      for i := 0 to dirCount - 1 do
      begin
        ftpDir[i].FileName := idftp.DirectoryListing[i].FileName;
        ftpDir[i].ItemType := idftp.DirectoryListing[i].ItemType;
      end;  for i := 0 to DirCount - 1 do
      begin
        if (ftpDir[i].ItemType = ditDirectory) and (ftpDir[i].FileName <> '.') and (ftpDir[i].FileName <> '..') then
          FTP_DeleteAllFiles(idFTP, RemoteDir+'/'+ftpDir[i].FileName, RootDir)
        else if (ftpDir[i].ItemType = ditFile) then
          idFTP.Delete(ftpDir[i].FileName);
      end;  idFTP.ChangeDirUp;
      idFTP.RemoveDir(RemoteDir);
    end;
    重新改了一下,测试过行的