co tu jest nie tak? wyskakuje błąd przy kasowaniu pliku jeśli w katalogu data\już znajdują się pobierane pliki

if idftp1.connected=true then
 begin
  timer2.enabled:=false;
  if not fileexists('data\dane.dat)then
  begin
  idftp1.Get('dane.dat','data\dane.dat');
  end
  else
  begin
  P.Wnd:=Handle;
   P.wFunc:=FO_DELETE;
   P.pFrom:=pchar(extractfilepath(application.exename)+'data\dane.dat');
   P.fFlags:=FOF_NOCONFIRMATION;
   p.fAnyOperationsAborted:=false;
  SHFileOperation(P);
  idftp1.Get('dane.dat','data\dane.dat');
  end;

  assignfile(plik,'data\dane.dat');
  reset(plik);
  while (a.login<>edit1.text) and (a.haslo<>edit2.text) do
    begin
    read(plik,a);
    if (a.login=edit1.text) and (a.haslo=edit2.text) then
     begin
     if not fileexists('data\'+edit1.text+'.dat')then idftp1.Get(edit1.text+'.dat,'data\'+edit1.text+'.dat')
     else
      begin
      P.Wnd:=Handle;
   P.wFunc:=FO_DELETE;
   P.pFrom:=pchar(extractfilepath(application.exename)+'data\'+edit1.text+'.dat');
   P.fFlags:=FOF_NOCONFIRMATION;
   p.fAnyOperationsAborted:=false;
  SHFileOperation(P);
  idftp1.Get(edit1.text+'.dat','data\'+edit1.text+'.dat');
      end;
     idftp1.Disconnect;
     closefile(plik);
     
P.Wnd:=Handle;
   P.wFunc:=FO_DELETE;
   P.pFrom:=pchar(extractfilepath(application.exename)+'data\'+edit1.text+'.dat');
   P.fFlags:=FOF_NOCONFIRMATION;
   p.fAnyOperationsAborted:=false;
  SHFileOperation(P);
end;

normalnie jestem w szoku :-|
są 2 wyjścia, albo wszystkim działa kod, który podalem wyżej a mi coś się walnęło, albo nikt nie wie co jest z nim nie tak, więc jak to jest? ;)