Удаление папок

KaZaK555

У меня есть 2 папки Logs и Cache и вних пишутся логи и кеш. как при нажатие на кнопку удалить папки и то что вних?
9 ответов

KaZaK555

функция RemoveDir удаляет папку из текущей папки.
begin
  // Создание нового каталога в текущей директории
  if CreateDir('TestDir')
  then ShowMessage('Новый каталог добавлен')
  else ShowMessage('Добавление нового каталога провалилось с ошибкой: '+
                   IntToStr(GetLastError));
 
  // Удаление этого каталога
  if RemoveDir('TestDir')
  then ShowMessage('TestDir удален')
  else ShowMessage('TestDir не удален, произошла ошибка : '+
                   IntToStr(GetLastError));
end;


KaZaK555

Electroflower, ты мне дал не то что я просил! да этот код удаляет папку! но он не удаляет то что еще в ней находица! мне нужен код который будет удалять всю папку и папки в ней и файлы в этих папках =)))


KaZaK555

procedure TForm1.DelAllinFolder(const dir: string);
Var SR:TSearchRec;
    FindRes:Integer;
begin
FindRes:=FindFirst(dir+'*.*',faAnyFile,SR);
While FindRes=0 do
   begin
    if ((SR.Attr and faDirectory)=faDirectory)and(SR.Name<>'.')and(SR.Name<>'..') then
      begin
      Application.ProcessMessages;
        DelAllinFolder(dir+SR.Name+'\');
        RemoveDir(dir+SR.Name);
      end;
    if ((SR.Attr and faDirectory)<>faDirectory)and(SR.Name<>'.')and(SR.Name<>'..') then
        DeleteFile(dir+SR.Name);
 
      FindRes:=FindNext(SR);
   end;
FindClose(SR); // Г§Г*êðûâГ*ГҐГ¬ ïîèñê
end;


KaZaK555

У меня есть 2 папки Logs и Cache и вних пишутся логи и кеш. как при нажатие на кнопку удалить папки и то что вних?
Вроде начиная с delphi 2010, можно сделать так
TDirectory.Delete('полный путь твоей директории',true);
Не забыть подключить модуль IOUtils


KaZaK555

anonimus, спасибо а я нашел фунцкию по интересние
function DelDir(dir: string): Boolean;
var
  fos: TSHFileOpStruct;
begin
  ZeroMemory(@fos, SizeOf(fos));
  with fos do
  begin
    wFunc  := FO_DELETE;
    fFlags := FOF_SILENT or FOF_NOCONFIRMATION;
    pFrom  := PChar(dir + #0);
  end;
  Result := (0 = ShFileOperation(fos));
end;
чем она интересно от твоей отличается. кстати а твою я поставить не смог при компиляции ругается может какойто компанент ставить надо?


KaZaK555

при компиляции ругается
как ругается?


KaZaK555

var
  fos: TSHFileOpStruct;
begin
  ZeroMemory(@fos, SizeOf(fos));
  with fos do
  begin
    wFunc  := FO_DELETE;
    fFlags := FOF_SILENT or FOF_NOCONFIRMATION;
    pFrom  := PChar(dir + #0);
  end;
  Result := (0 = ShFileOperation(fos));
end;
Я так понял Shellapi добавить нужно, иначе неработает. А какой код на кнопку то писать непонял?


KaZaK555

Вроде начиная с delphi 2010, можно сделать так
TDirectory.Delete('полный путь твоей директории',true);
Не забыть подключить модуль IOUtils
все правильно, удаляет каталог полностью, в то время как RemoveDir() не удаляет, если каталог не пустой


KaZaK555

В Delphi XE3 проверил работает этот код, жалко что в Delphi-7 неработает...