Первое же, что бросилось в глаза:
Код:
DD := Copy(DateToStr(FileDate), 1, 2);
MM := Copy(DateToStr(FileDate), 4, 2);
YY := Copy(DateToStr(FileDate), 7, 4);
Зачем 3 раза вызывать DateToStr(FileDate)? Можно вызвать 1 раз и сохранить результат в переменную и не конвертировать double в дату лишних 2 раза.
А может лучше вообще попробовать
FormatDateTime?