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;
}