Da dein Parameter TStrings und die einzelnen werte somit String sind, wäre die dynamischen PChar und CopyFile passend (lso ohne W
ide).
Du könntest mal die Schleife rückwärts laufen lassen
for iZ := FileList.Count-1 downto 0 do begin
... mal sehn, ob es nun immer der erste Eintrag ist.
Wenn ja, dann liegt es schonmal nicht an dieser Schleife.
Dann gibt es Programme ala
File Unlocker, mit welchen man mal schauen kann, ob und wo diese Datei noch geöffnet ist.
> entweder ein externes Programm, oder du hast in deinem Programm/Code dieses Datei irgendwo vorher vergessen freizugeben.