Q&A

  • ftp 재귀호출로 폴더 삭제시 에러...
몇일째 삽질하고 있습니다. 도와주세요~~ ㅡ..ㅡ;
문제는 재귀호출에서 List index out of bounds(1) 가 발생합니다.
TEST
└TEST
   └TEST
위와 같이 단일 폴더들만 있는 경우에는 삭제가 잘되는데여
TEST
  └TEST
  └TEST
이런 식인 경우에 에러가...
아래 작성한 소스인데 뭐가 문제일까여?


procedure FTP.DelClick(Sender: TObject);
begin
    Folder_Delete(Folder_Name);
end;

procedure FTP.Folder_Delete(DirName: String);
var
  I: Integer;
  ThisPath: String;
  DirList: TIdFTPListItems;
  DirItem: TIdFTPListItem;
begin
  IdFTP.ChangeDir(DirName);
  IdFTP.List(nil);
  DirList := IdFTP.DirectoryListing;
  for I := 0 to DirList.Count - 1 do begin
    DirItem := DirList.Items[I];
    ThisPath := DirName + '/' + DirItem.FileName;
    if DirItem.ItemType = ditDirectory then begin
      All_Folder_Check(ThisPath);
    end else IdFTP.Delete(ThisPath);
  end;
  IdFTP.RemoveDir(DirName);
end;
4  COMMENTS
  • Profile
    nilriri™ 2005.05.10 18:04
    재귀호출함수라면..

    procedure FTP.Folder_Delete(DirName: String);

    여기가...      All_Folder_Check(ThisPath);

    Folder_Delete 가 되어야 할거 같은데요..

    인덱스값 1 이 가르키는 아이템 요소가 없어서 그러는거 같은데..용일님 말씀처럼 for문수정하시고..

    브레이크 포인트 걸어서 확인을 해보시는게..^^;

    그럼..

  • Profile
    최용일 2005.05.09 18:56
    안녕하세요. 최용일입니다.

    맞을런지 대강봐서 잘 모르겠지만...

    for문을 아래와 같이 바꿔서 해보세요..

    for I := DirList.Count - 1 downto 0 do begin

    ^^ 항상 즐코하세요...

  • Profile
    김하늘 2005.05.09 22:44
  • Profile
    최용일 2005.05.09 23:57
    안녕하세요. 최용일입니다.

    글쎄요... 에러가 발생하는 위치는 DirItem := DirList.Items[I]; 이부분 밖에 없는데...

    제 생각에는 적어주신 코드가 아니라 다른 부분에서 발생하는것 같네요...

    직접 디버깅 해보시는것이 좋을듯...

    ^^ 항상 즐코하세요...