К сожалению при оформлении выяснилось, что я ничерта не помню фигур блок-схем, поэтому приведу выкладки простым русским языком с использованием терминологии Delphi:
1. Вход в скрипт.
2. создаем динамический массив:
fs_array=array of record
filename: string[255]; //здесь будут храниться имена фалов картинок
live: boolean //Здесь будем отмечать живые картинки
end;
3. Создаем динамический массив:
db_array=array of record
filename: string[255]; //здесь будут ссылки на картинки из БД
live: boolean
end;
4. Массив fs_array заполняем соответсвенно именами файлов картинок в файловой системе.
5. Массив db_array заполняем ссылками на файлы из базы данных
6. Отмечаем те файлы, которые присутствуют и в БД, и в файловой системе
for i:=0 to length(fs_array)-1 do
for j:=0 to length(db_array)-1 do
if fs_array.filename=db_array[j].filename then
begin
fs_array.live:=true;
db_array[j].live:=true
end;
После выполнения этого цикла у нас все живые картинки в массиве fs_array будут иметь поле live равное true. Все ссылки на живые картинки в БД тоже.
7. Удалять мертвые картинки не будем (что бы минимизировать потери от ошибок, будем переименовывать)
for i=0 to length(fs_array)-1 do
if not fs.array then
begin
Здесь мы переименовываем файл с именем fs_array.filename в, например, '~~~'+fs_array.filename. Тогда их можно легко отсортировать и удалить. Ну или сразу удаляем.
end;
Тот же самый цикл можно повторить для удаления мертвых ссылок на картинки из БД (такие тоже могут быть).
8. Выход. (опционально можно сохранить лог работы)
Я извиняюсь за отсутствие блок-схемы. Видимо состарился ((
ЗЫ. И табуляция здесь не сохраняется.