No es necesario usar la clase
FileInfo a menos que quieras representar la información de un archivo en la interfaz gráfica, o acceder a dicha información para otros usos, en cuyo caso también sería conveniente usar la clase
DirectoryInfo en vez de mezclar declaraciones de tipo string con instancias de la clase
FileInfo...
// Source file.
FileInfo srcFile
= new FileInfo
(@"C:\Archivo.ext");
// Destination directory.
DirectoryInfo dstDir
= new DirectoryInfo
(@"C:\Directorio\");
// Destination file.
FileInfo dstFile
= new FileInfo
(Path
.Combine(dstDir
.FullName, srcFile
.Name));
try {
dstDir.Create();
srcFile.CopyTo(dstFile.FullName);
} catch (Exception ex) {
throw;
}
Si por lo contrario tu única intención es usar el método
FileInfo.CopyTo(), crear una instancia de la clase
FileInfo como ya dije es completamente inadecuado e innecesario. En su lugar puedes usar el método
System.IO.File.Copy()...
// Source file path.
string srcFilePath = @"C:\Archivo.ext";
// Destination directory path.
string dstDirPath = @"C:\Directorio\";
// Destination file path.
string dstFilePath = Path.Combine(dstDirPath, Path.GetFileName(srcFilePath));
try {
Directory.CreateDirectory(dstDirPath);
File.Copy(srcFilePath, dstFilePath, overwrite:false);
} catch (Exception ex) {
throw;
}
Nótese que no es necesario comprobar si el directorio existe o no, de eso ya se encarga el método
DirectoryInfo.Create() o
Directory.CreateDirectory(), los cuales no lanzarán ninguna excepción si el directorio ya fue creado con anterioridad.
Saludos.