我一直在试图找出在 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;
}