Как удалить файлы, соответствующие шаблону в рамках каталога

Инструменты важны, поэтому я рекомендую хотя бы кое-что упомянуть о

  • Make-файлах и о том, как работает процесс сборки
  • gdb
  • lint
  • полезность предупреждений компилятора

Что касается C, я думаю, что важно подчеркнуть, что программист должен знать, что на самом деле означает «неопределенное поведение», то есть знать, что в будущем может возникнуть проблема даже если кажется, что он работает с текущей комбинацией компилятор / платформа.

Редактировать: я забыл: научить их искать и задавать правильные вопросы о SO!

10
задан volvox 12 June 2009 в 19:55
поделиться

2 ответа

procedure TForm1.Button1Click(Sender: TObject);
begin
  DeleteFiles(ExtractFilePath(ParamStr(0)),'*.jpg');
end;

procedure DeleteFiles(APath, AFileSpec: string);
var
  lSearchRec:TSearchRec;
  lPath:string;
begin
  lPath := IncludeTrailingPathDelimiter(APath);

  if FindFirst(lPath+AFileSpec,faAnyFile,lSearchRec) = 0 then
  begin
    try
      repeat
        SysUtils.DeleteFile(lPath+lSearchRec.Name);    
      until SysUtils.FindNext(lSearchRec) <> 0;
    finally
      SysUtils.FindClose(lSearchRec);  // Free resources on successful find
    end;
  end;
end;
25
ответ дан 3 December 2019 в 14:00
поделиться

Вы можете использовать функцию SHFileOperation. Преимущество использования SHFileOperation в том, что у вас есть возможность удалить файлы в корзину и получить обычную анимацию API, чтобы пользователь знал, что происходит. Обратной стороной является то, что удаление займет немного больше времени, чем код Джеффа.

Есть несколько оболочек. Я использую эту бесплатную оболочку от BP Software. Весь файл-оболочка состоит всего из 220 строк, и его легко читать и использовать. Я не устанавливаю это как компонент. Я обнаружил, что проще добавить этот модуль в мой проект и просто создать и освободить объект по мере необходимости.

Обновление: ссылка для загрузки на сайт BP Software больше не действительна. На сайте Embarcadero имеется более старая версия.

TSHFileOp (1.3.5.1) (3 КБ)
Май 31, 2006
TComponent, который является оболочкой для копирования API SHFileOperation, переместить, переименовать или удалить (с поддержка корзины) файловая система объект.

Параметр имени файла для SHFileOperation поддерживает подстановочные знаки в стиле MS DOS. Таким образом, вы можете использовать этот компонент следующим образом:


      FileOps := TSHFileOp.Create(self);

      FileOps.FileList.Add(DirectoryName + '\*.jpg');

      FileOps.HWNDHandle := self.Handle;
      FileOps.Action := faDelete;
      FileOps.SHOptions :=
          [ofAllowUndo, ofNoConfirmation, ofFilesOnly, ofSimpleProgress];
      FileOps.Execute;

Я обычно сам показываю сообщение «Вы уверены?», Поэтому я всегда передаю флаг ofNoConfirmation, чтобы Windows не запрашивала снова.

Если вы не хотите удалять каждый файл jpg файл или вам нужно удалить из нескольких каталогов, вы можете добавить полные имена файлов или разные пути с подстановочными знаками в список строк FileList перед вызовом execute.

Вот страница MSDN для SHFileOperation
Обратите внимание, что SHFileOperation имеет был заменен на IFileOperation, начиная с Windows Vista. Я без проблем продолжал использовать SHFileOperation в Windows Vista.

5
ответ дан 3 December 2019 в 14:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: