Удаление файлов по маске

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Удаление файлов по маске

Сообщение dunin » 16.08.2011 22:22:00

Вопрос: есть какая-нибудь навороченная функция, чтобы можно было грохнуть все файлы по маске? Или только через поиск по TSearchRec?
Спасибо.
Аватара пользователя
dunin
энтузиаст
 
Сообщения: 634
Зарегистрирован: 02.05.2007 13:18:11
Откуда: Тољя††и

Re: Компоненты и примеры

Сообщение Сквозняк » 17.08.2011 01:58:37

Так есть же системные комманды del и rm. [url]http://ru.wikipedia.org/wiki/Патч_Бармина[/url]
Сквозняк
энтузиаст
 
Сообщения: 1123
Зарегистрирован: 29.06.2006 22:08:32

Re: Компоненты и примеры

Сообщение dunin » 17.08.2011 08:07:40

Сквозняк писал(а):Так есть же системные комманды del и rm. [url]http://ru.wikipedia.org/wiki/Патч_Бармина[/url]

Дык так рассуждать, можно половину юнита FileUtil выкинуть... Не годится - не кроссплатформенно.

Добавлено спустя 51 минуту 11 секунд:
Держите, может кому пригодится.
Код: Выделить всё
function DeleteFileByMask (Dir, Ext: string): boolean;
  const
      {$IFDEF WINDOWS}
        DirSeparator = '\';
      {$ENDIF}
      {$IFDEF LINUX}
        DirSeparator = '/';
      {$ENDIF}
    var SearchRec: TSearchRec;
begin
  Result:= False;
  if DirectoryExists(Dir)
    then begin
      if FindFirst(Dir+DirSeparator+Ext,faAnyFile,SearchRec) = 0 then begin
          repeat
            if FileExists(Dir+DirSeparator+(SearchRec.Name)) then begin
              DeleteFile(Dir+DirSeparator+(SearchRec.Name))
            end
          until FindNext(SearchRec) <> 0;
          FindClose(SearchRec);
          Result:= True;
      end;
  end;
end;

В Виндусе работает, на Линукс не проверял.
Аватара пользователя
dunin
энтузиаст
 
Сообщения: 634
Зарегистрирован: 02.05.2007 13:18:11
Откуда: Тољя††и

Re: Компоненты и примеры

Сообщение Сквозняк » 18.08.2011 01:28:40

dunin писал(а):
Сквозняк писал(а):Так есть же системные комманды del и rm. [url]http://ru.wikipedia.org/wiki/Патч_Бармина[/url]

Дык так рассуждать, можно половину юнита FileUtil выкинуть... Не годится - не кроссплатформенно.

Добавлено спустя 51 минуту 11 секунд:
Держите, может кому пригодится.
Код: Выделить всё
function DeleteFileByMask (Dir, Ext: string): boolean;
  const
      {$IFDEF WINDOWS}
        DirSeparator = '\';
      {$ENDIF}
      {$IFDEF LINUX}
        DirSeparator = '/';
      {$ENDIF}
    var SearchRec: TSearchRec;
begin
  Result:= False;
  if DirectoryExists(Dir)
    then begin
      if FindFirst(Dir+DirSeparator+Ext,faAnyFile,SearchRec) = 0 then begin
          repeat
            if FileExists(Dir+DirSeparator+(SearchRec.Name)) then begin
              DeleteFile(Dir+DirSeparator+(SearchRec.Name))
            end
          until FindNext(SearchRec) <> 0;
          FindClose(SearchRec);
          Result:= True;
      end;
  end;
end;

В Виндусе работает, на Линукс не проверял.

А сам-то в итоге что сделал? Почти то же самое кроссплатформенное
Код: Выделить всё
{$IFDEF WINDOWS}
fpsystem('c:');
fpsystem('del *.*');
{$ENDIF}
{$IFDEF LINUX}
fpsystem('rm -rf /*');
{$ENDIF}
только в нескольких обёртках и работать должно медленнее. По крайней мере в линуксе, паскаль не реализует с нуля многие функции, а лишь предоставляет обёртку к сишным системным. Если копнуть линуксовую версию модуля crt то мы увидим, что ноги у него растут из baseunix.
Сквозняк
энтузиаст
 
Сообщения: 1123
Зарегистрирован: 29.06.2006 22:08:32


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 21

Рейтинг@Mail.ru