На основе File.Copy Method , Второй параметр - это новое имя файла, а не каталог:
Имя файла назначения. Это не может быть каталог или существующий файл.
Вам необходимо использовать аналогичную логику:
FileCopy(filestocopy[p],targetDir + "\\" + Path.GetFileName(filestocopy[p]));
Также рекомендуется проверить, существует ли файл в каталоге:
if (!File.Exists(targetDir + "\\" + Path.GetFileName(filestocopy[p])))
FileCopy(filestocopy[p],targetDir + "\\" + Path.GetFileName(filestocopy[p]));
Если вам нужно перезаписать любой существующий файл, вы можете добавить логический параметр :
FileCopy(filestocopy[p],targetDir + "\\" + Path.GetFileName(filestocopy[p]),true);