Я пытался найти лучший способ скопировать файлы в Windows с глубокими путями (файлы, а не папки, так что о Robocopy не может быть и речи). Лучшее решение, которое я смог найти, - это написать собственное решение. Я смог написать код для обработки списков каталогов с 10 000 символьных путей, но использование того же подхода, похоже, не работает для фактического копирования файлов. Я устал от использования библиотек System.IO с префиксом \? \ К путям, и это, похоже, не сработало.
[DllImport("kernel32.dll", CharSet = CharSet.Unicode)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool CopyFile(string lpExistingFileName, string lpNewFileName,
bool bFailIfExists);
public static bool CopyFile(string source, string dest)
{
source = fixPathForLong(source);
dest = fixPathForLong(dest);
return CopyFile(source, dest, false);
}
private static string fixPathForLong(String path)
{
if (!path.StartsWith(@"\\?\"))
path = @"\\?\" + path;
return path;
}