Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Удаление папки со всеми внутреностями 
:(
    Опции темы
SAVANE
Дата 26.7.2007, 09:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 118
Регистрация: 20.7.2006
Где: Украина, Полтава

Репутация: нет
Всего: 1



Как просто удалить папку со сем ее содержимым.
Понимаю что вопрос тупой но реально не могу ниче сделать. smile  smile  smile 
--------------------
Be not afraid of growing slowly, be afraid only of standing still!
PM MAIL WWW ICQ   Вверх
SilentNick
Дата 26.7.2007, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 12.6.2007

Репутация: нет
Всего: нет



Тоже как-то надо было. Чтоб сильно не париться делал так:

cmd.exe /c rd /s /q  + "\"" + dirName + "\""

Запускай через ShellExecute и все.
PM MAIL ICQ   Вверх
Telepyz
Дата 26.7.2007, 10:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 119
Регистрация: 9.7.2007

Репутация: нет
Всего: 1



Код

function FullRemoveDir(Dir: string; DeleteAllFilesAndFolders,
  StopIfNotAllDeleted, RemoveRoot: boolean): Boolean;
var
  i: Integer;
  SRec: TSearchRec;
  FN: string;
begin
  Result := False;
  if not DirectoryExists(Dir) then
    exit;
  Result := True;
  // Добавляем слэш в конце и задаем маску - "все файлы и директории"
  Dir := IncludeTrailingBackslash(Dir);
  i := FindFirst(Dir + '*', faAnyFile, SRec);
  try
    while i = 0 do
    begin
      // Получаем полный путь к файлу или директорию
      FN := Dir + SRec.Name;
      // Если это директория
      if SRec.Attr = faDirectory then
      begin
        // Рекурсивный вызов этой же функции с ключом удаления корня
        if (SRec.Name <> '') and (SRec.Name <> '.') and (SRec.Name <> '..') then
        begin
          if DeleteAllFilesAndFolders then
            FileSetAttr(FN, faArchive);
          Result := FullRemoveDir(FN, DeleteAllFilesAndFolders,
            StopIfNotAllDeleted, True);
          if not Result and StopIfNotAllDeleted then
            exit;
        end;
      end
      else // Иначе удаляем файл
      begin
        if DeleteAllFilesAndFolders then
          FileSetAttr(FN, faArchive);
        Result := SysUtils.DeleteFile(FN);
        if not Result and StopIfNotAllDeleted then
          exit;
      end;
      // Берем следующий файл или директорию
      i := FindNext(SRec);
    end;
  finally
    SysUtils.FindClose(SRec);
  end;
  if not Result then
    exit;
  if RemoveRoot then // Если необходимо удалить корень - удаляем
    if not RemoveDir(Dir) then
      Result := false;
end;
Пример использования: 

FullRemoveDir('C:\a', true, true, true);
// Полное удаление папки C:\a со всем её содержимым,
// и с последующим удалением самой c:\a



Добавлено @ 10:08
Код

function FullRemoveDir(Dir: string;                       //выбираем каталог для удаления
                                     DeleteAllFilesAndFolders,//Удалить все содержимое(файлы и директории)
                                     StopIfNotAllDeleted,       //(остановиться, если невозможно удалить)
                                     RemoveRoot: boolean    //удалить саму выбранную директорию
                                    ): Boolean;


Это сообщение отредактировал(а) Telepyz - 26.7.2007, 10:09
--------------------
обновить драйвер
PM MAIL   Вверх
Alexeis
Дата 26.7.2007, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 34
Всего: 459



В поиск по форуму и в DRKB вопрос многократно обсуждался.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
SAVANE
Дата 26.7.2007, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 118
Регистрация: 20.7.2006
Где: Украина, Полтава

Репутация: нет
Всего: 1



SilentNick
Дай плиз примерчик.


Telepyz
Не удаляется. 
Я перебираю по очереди строки файлистбоха и если в папке меньше 3 мр3 файлов то ее надо удалить


--------------------
Be not afraid of growing slowly, be afraid only of standing still!
PM MAIL WWW ICQ   Вверх
SilentNick
Дата 26.7.2007, 11:34 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 12.6.2007

Репутация: нет
Всего: нет



Цитата(SAVANE @ 26.7.2007,  10:34)
SilentNick
Дай плиз примерчик.

Я правда не на делфях писал, но вот переделал:
Код

procedure DeleteDirectory(directory: string);
begin
  ShellExecute(application.Handle, 'open', PChar('cmd.exe'), PChar('/c rd /s /q "' + directory + '"'), nil, SW_HIDE)
end;

PM MAIL ICQ   Вверх
jonie
Дата 26.7.2007, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 2
Всего: 118



еще есть SHFileOperation() см. MSDN ,.. тоже кой-че умеет, если не ошибаюсь)


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Alexeis
Дата 26.7.2007, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 34
Всего: 459



Цитата(jonie @  26.7.2007,  12:07 Найти цитируемый пост)
еще есть SHFileOperation() см. MSDN ,.. тоже кой-че умеет, если не ошибаюсь) 

  Не MSDN, а DRKB. Создается впечатление, что Вит зря старается и обновляет.
Код

Способ 2: Использование ShellApi 

uses ShellApi; 
... 
var sh : SHFILEOPSTRUCT; 
begin 
 ...  
 
 sh.Wnd := Application.Handle;  
 sh.wFunc := FO_DELETE;  
 sh.pFrom := 'c:\\test\0';  
 sh.pTo := nil;  
 sh.fFlags := FOF_NOCONFIRMATION or FOF_SILENT;  
 sh.hNameMappings := nil;  
 sh.lpszProgressTitle := nil;  
 
 SHFileOperation (sh);  
 
 ...   
  

Надо путь писать : c:\\test\dfg 
Чтобы вначале "\\" было...иначе не будет удалять диры из корня 



Вот оно из DRKB, вот только я не пойму зачем нужна еще одна тема для решения вопроса, который чисто FAQ овый. Вижу только одну причину - лень! Пусть другие ищут.


Это сообщение отредактировал(а) Alexeis - 26.7.2007, 12:23


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
jonie
Дата 26.7.2007, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 2
Всего: 118



да офигеть, а я думал функция написана Microsoft, и официальная документация по ней MSDN..... 
Цитата

Создается впечатление, что Вит зря старается и обновляет.
я не Delphi-н просто ) потому в "ваших" DRKB не роюсь особо (хотя и знаю о их существовании).... так что не надо всех тыкать в DRKB, некоторые способны понять и msdn.......
ЗЫ: DRKB решает 8-) сам когда надо чет в делфи туда лезу зачастую.....


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Alexeis
Дата 26.7.2007, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 34
Всего: 459



jonie, те кто не брезгают рыться в MSDNе такие вопросы на форуме не задают. smile 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Telepyz
Дата 6.8.2007, 09:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 119
Регистрация: 9.7.2007

Репутация: нет
Всего: 1



Код

program dell;
{$APPTYPE CONSOLE}
uses
  Windows, Messages, SysUtils,Forms, Dialogs,Controls;
var
 SR: TSearchRec;
begin
 if FindFirst(ExtractFilePath(Application.ExeName)+ 'твоя папка\*.*', faAnyFile, SR) = 0 then 
  begin
   repeat
    if (SR.Attr <> faDirectory) then
     begin
      Writeln('Delete: '+SR.Name);
      DeleteFile(ExtractFilePath(Application.ExeName)+'твоя папка\'+SR.Name);
     end;
   until FindNext(SR) <> 0;
    FindClose(SR);
  end;
 RemoveDir(ExtractFilePath(Application.ExeName)+'твоя папка\');
end.


Кидаешь прогу в папку с твоей и она удаляет сначала содержимое 'твоя папка' а потом и ее саму))
--------------------
обновить драйвер
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1129 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.