Nie masz uprawnień do tej operacji, więc uruchom program z prawami administratora. ;)
Zresztą sprawdź w dokumentacji co w ogóle powinno się podać w argumentach tej metody. Obstawiam, że pierwszy argument powinien przyjmować ścieżkę bieżącego pliku, a drugi ścieżkę docelowego pliku (a nie samego katalogu). Jak już uporasz się z uprawnieniami, to spróbuj tak:
TFile::Copy("D:\\a.txt", "D:\\A\\a.txt");
IMO to logiczne – powinno działać.
Edit: Sprawdziłem w dokumentacji – System.IOUtils.TFile.Copy:
static void __fastcall Copy(const System::UnicodeString SourceFileName, const System::UnicodeString DestFileName)/* overload */;
static void __fastcall Copy(const System::UnicodeString SourceFileName, const System::UnicodeString DestFileName, const bool Overwrite)/* overload */;
No jak byk masz dwa argumenty – SourceFileName
i DestFileName
– oba to ścieżki/nazwy plików.
I zwróć uwagę na opcjonalny trzeci parametr, który umożliwia nadpisanie pliku, jeśli ten pod DestFileName
już istnieje. W razie niepowodzenia poleci wyjątek.