0

例外をスローし始めたコードがいくつかあります: TooLongPathException. そこで、調査を行ったところ、.net 4.6.2 がこの問題を解決することがわかりました。すごい!

失敗するコードは、フォルダーを別のフォルダーに移動およびコピーするコードです。.net 4.6.2 フレームワークを使用して、このコードでより長いパスを使用できるようにしたいので、回避策をコーディングする必要はありません。

マシンに .net 4.6.2 フレームワークをインストールしました。マシンは Windows サーバー 2008 R2 SP1 を実行します。プロジェクトのターゲットを 4.6.2 フレームワークにしましたが、それでもこのエラーがスローされます。

ここで何が欠けているのかわかりません。

私が何をする必要があるかについて私に指摘できる同様のことのために.net 4.6.2を使用した人はいますか?

4

1 に答える 1

0

膨大な数のテストの後、これが 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) でできるだけ早く利用できるようにする必要があると思います。申し訳ありませんが、今のところこれは悪いようです。

于 2016-11-16T15:16:13.800 に答える