在Windows服务中使用.net 4.6.2使用长路径(>260)

本文关键字:路径 服务 Windows net | 更新日期: 2023-09-27 18:16:14

我有一些代码已经开始抛出异常:TooLongPathException。所以我做了一些研究,发现。net 4.6.2解决了这个问题。太棒了!

失败的代码是移动和复制文件夹到不同的文件夹的代码。我想使用。net 4.6.2框架,使这段代码使用更长的路径,所以我不需要编写一些变通方法。

我已经在机器上安装了。net 4.6.2框架。操作系统为Windows server 2008 R2 SP1。我已经使项目目标4.6.2框架,但仍然抛出这个错误。

我不知道我在这里错过了什么。

有没有人使用。net 4.6.2类似的事情,可以指出我需要做什么?

在Windows服务中使用.net 4.6.2使用长路径(>260)

经过无数次测试后,我可以确认这在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) { }
    }

我认为微软应该尽快使"启用Win32长路径"策略适用于Server 2012(甚至2008)。