膨大な数のテストの後、これが Windows10 の .Net 4.6.2 で動作することを確認できますが、Server 2012r2 では失敗します。
Windows10 で共有上に作成した長いフォルダーを削除したいのですが、サーバーが削除に失敗します。私の回避策は昔ながらの Robocopy です。
public static void DirectoryDeleteRobocopy(string a_strPath)
{
_log.Debug("DirectoryDeleteRobocopy called: " + a_strPath);
string strTmpDir = System.Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
var emptyDirectory = new DirectoryInfo(strTmpDir + "\\TempEmptyDir_" + Guid.NewGuid());
try
{
emptyDirectory.Create();
using (var process = new Process())
{
process.StartInfo.FileName = "robocopy.exe";
process.StartInfo.Arguments = "\"" + emptyDirectory.FullName + "\" \"" + a_strPath + "\" /e /purge";
process.StartInfo.UseShellExecute = false;
process.StartInfo.CreateNoWindow = true;
process.Start();
process.WaitForExit();
}
emptyDirectory.Delete();
new DirectoryInfo(a_strPath).Attributes = FileAttributes.Normal;
Directory.Delete(a_strPath);
}
catch (IOException) { }
}
Microsoft は、「Win32 の長いパスを有効にする」ポリシーを Server 2012 (およびおそらく 2008) でできるだけ早く利用できるようにする必要があると思います。申し訳ありませんが、今のところこれは悪いようです。