Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.07.2011, 12:18   #11
fate
Форумчанин
 
Аватар для fate
 
Регистрация: 17.03.2009
Сообщений: 318
По умолчанию

удаляешь все файлы в папке, если есть подкаталоги рекурсивно обходишь их и удаляешь файлы в них тоже, а потом удаляй пустые папки функцией RemoveDir
fate вне форума Ответить с цитированием
Старый 01.07.2011, 12:21   #12
stebelek
Пользователь
 
Регистрация: 26.06.2011
Сообщений: 12
По умолчанию

fate, можешь в аське объяснить подробно, просто я ноль в делфи
stebelek вне форума Ответить с цитированием
Старый 01.07.2011, 12:26   #13
fate
Форумчанин
 
Аватар для fate
 
Регистрация: 17.03.2009
Сообщений: 318
По умолчанию

тебе же в 6 посте дали ссылку на такой способ удаления
fate вне форума Ответить с цитированием
Старый 01.07.2011, 13:32   #14
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

stebelek

1) способ удаления из Delphi
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
  DelDir('C:\temp');
  SysUtils.DeleteFile('skynet.log');
.....
ну, или, если папка находится в текущей для EXEшника папке, можно и так:
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
  DelDir('temp');
  SysUtils.DeleteFile('skynet.log');
.....
ВНИМАНИЕ!!! ОЧЕНЬ желательно указывать ПОЛНЫЙ путь к папке!

p.s. кстати к файлам тоже желательно указывать ПОЛНЫЙ путь

2) способ через BAT файл:
Код:
rmdir C:\Temp /S /Q
erase skynet.log /Q
erase files.dat /Q
....

Последний раз редактировалось Serge_Bliznykov; 01.07.2011 в 13:36.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 02.07.2011, 20:57   #15
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Может этот пример чем поможет.
Удаляет все в папке.

Код:
//Вывести список всех файлов директории
procedure ListFile(const Path : string; FileList: TStrings; ViewPath: boolean=false; Filtr: string='*.*');
 var
   SR: TSearchRec;
 begin
   if FindFirst(Path + Filtr, faAnyFile, SR) = 0 then
   begin
     repeat
     application.ProcessMessages;
       if ((sr.Attr and faDirectory) <> faDirectory) then
       begin
       if not ViewPath then
         FileList.Add(SR.Name)
         else
        FileList.Add(Path+SR.Name);
       end;
     until FindNext(SR) <> 0;
     FindClose(SR);
   end;
 end;

 //Вывести список всех директории в директории
 procedure ListDir(Const Path: string; FileList: TStrings; ViewPath: boolean=false);
 var
   SR: TSearchRec;
 begin
   if FindFirst(Path + '*', faAnyFile, SR) = 0 then
   begin
     repeat
      application.ProcessMessages;
       if ((sr.Attr and faDirectory) = faDirectory)and(SR.Name <> '.')and(SR.Name <> '..') then
       begin
         if not ViewPath then
         FileList.Add(SR.Name)
         else
        FileList.Add(Path+SR.Name);
       end;
     until FindNext(SR) <> 0;
     FindClose(SR);
   end;
 end;

//Удаление директорий с содержимым
function DelDir(Const 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;

//Удаление всех папок и файлов в директории
procedure DeleteAll(Const dir: string);
var
i: integer;
DelList: TStringList;
begin
DelList:=TStringList.Create;
//1-этап Создать список файлов в директории и удалить
ListFile(dir, DelList, true);
for i:=0 to DelList.Count-1 do begin
application.ProcessMessages;
//удаляем файлы из списка
if not DeleteFile(DelList[i]) then
ShowMessage('Не могу удалить файл: ' + DelList[i]);
end;

DelList.Clear;
//2-этап Создать список директорий
ListDir('c:\temp\', DelList, true);
for i:=0 to DelList.Count-1 do begin
application.ProcessMessages;
//Удаляем директории из списка
if not DelDir(DelList[i])then
ShowMessage('Не могу удалить директорию: ' + DelList[i]);
end;
DelList.Free;
end;


//Использование
procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
begin
//Удаляем все папки и файлы в директории
DeleteAll('c:\temp\');
end;

Последний раз редактировалось Aliens_wolfs; 02.07.2011 в 22:24.
Aliens_wolfs вне форума Ответить с цитированием
Старый 03.07.2011, 17:30   #16
HyperZen
Пользователь
 
Аватар для HyperZen
 
Регистрация: 20.07.2010
Сообщений: 45
По умолчанию

Код:
// Удаляем все файлы и подкаталоги в директории (рекурсия)
function RemoveAllDir(sDir: String): Boolean;
var
  iIndex : Integer;
  SearchRec : TSearchRec;
  sFileName : String;
begin
  Result := False;
  sDir := sDir + '\*';
  iIndex := FindFirst(sDir, faAnyFile, SearchRec);

  while iIndex = 0 do
    begin
      sFileName := ExtractFileDir(sDir)+'\'+SearchRec.Name;
      if SearchRec.Attr = faDirectory then
        begin
          if (SearchRec.Name <> '' ) and
          (SearchRec.Name <> '.') and
          (SearchRec.Name <> '..') then
          RemoveAllDir(sFileName);
        end
        else
          begin
            if SearchRec.Attr <> faArchive then
              FileSetAttr(sFileName, faArchive);
              SysUtils.DeleteFile(sFileName);
          end;
            iIndex := FindNext(SearchRec);
    end;
      SysUtils.FindClose(SearchRec);
      RemoveDir(ExtractFileDir(sDir));
      Result := True;
end;
Плохого человека должно быть мало...

Последний раз редактировалось HyperZen; 03.07.2011 в 17:33.
HyperZen вне форума Ответить с цитированием
Старый 16.02.2012, 17:33   #17
ViToTiV
 
Регистрация: 13.02.2007
Сообщений: 3
По умолчанию

да уж.... народ лёгких путей не ищет.... иногда и хелп полезно почитать:

Код:
uses IOUtils;
......
TDirectory.Delete('путь к папке', True);
ViToTiV вне форума Ответить с цитированием
Старый 16.02.2012, 18:16   #18
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

Цитата:
Сообщение от ViToTiV Посмотреть сообщение
да уж.... народ лёгких путей не ищет.... иногда и хелп полезно почитать:

Код:
uses IOUtils;
......
TDirectory.Delete('путь к папке', True);
Это в стандарной дельфи есть? хмм
vovk вне форума Ответить с цитированием
Старый 16.02.2012, 19:04   #19
ViToTiV
 
Регистрация: 13.02.2007
Сообщений: 3
По умолчанию

в хелпе сказано версия 2010 и выше
ViToTiV вне форума Ответить с цитированием
Старый 16.02.2012, 19:52   #20
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
в хелпе сказано версия 2010 и выше
ничего себе у Вас подходы к "лёгким путям"!

Приведённый в теме код прекрасно будет работать под ЛЮБОЙ версией Delphi (у меня, например, Delphi 5).

впрочем, если у кого-то из тех, кто наткнётся на данную тему будет Delphi версии 2010 (или старше), ему Вас совет будет полезен!
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как удалить поврежденную папку? Vikenty Компьютерное железо 13 21.10.2011 20:18
Как удалить неудаляющуюся папку? Yury111 Безопасность, Шифрование 69 15.11.2009 19:46
скопировать папку со всем её содержимым Tech07 Общие вопросы Delphi 8 02.12.2007 12:06
удалить папку без Димарик Общие вопросы Delphi 3 04.10.2007 13:12
Как скопировать папку со всем ее содержимым Arsgun Общие вопросы Delphi 2 09.06.2007 22:07