Инструменты важны, поэтому я рекомендую хотя бы кое-что упомянуть о
Что касается C, я думаю, что важно подчеркнуть, что программист должен знать, что на самом деле означает «неопределенное поведение», то есть знать, что в будущем может возникнуть проблема даже если кажется, что он работает с текущей комбинацией компилятор / платформа.
Редактировать: я забыл: научить их искать и задавать правильные вопросы о SO!
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;
Вы можете использовать функцию 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.