【问题标题】:Using long paths (>260) with .net 4.6.2 in Windows service在 Windows 服务中使用带有 .net 4.6.2 的长路径 (>260)
【发布时间】:2017-03-18 06:56:33
【问题描述】:

我有一些代码已经开始抛出异常: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 来完成类似的事情,可以指出我需要做什么?

【问题讨论】:

  • 你从哪里读到 .Net4.6.2 解决了这个问题?
  • 不要将“推迟”问题误认为“解决”问题。
  • @TaW 这是非常孤立的代码,我无法缩短路径,因为客户是创建路径的人。这往往是几个嵌套文件夹,路径名很长,最后文件名很长。
  • @user1666620 是的。但我不想这样做,而且微软已经发布了一个 .net 框架,专门明确地针对这个问题。即使我会告诉客户不要再傻了,我仍然想让这个工作。它应该像定位框架 4.6.2 一样简单。有人可以创建一个以框架 6.4.2 为目标的控制台应用程序并尝试创建长度超过 260 个字符的路径吗?

标签: c# pathtoolongexception .net-4.6.2


【解决方案1】:

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

我认为微软应该尽快为 Server 2012(甚至可能是 2008)提供“启用 Win32 长路径”策略。抱歉,但现在看起来很糟糕。

【讨论】:

  • 感谢您花时间进行测试,但我不能接受这是公认的解决方案,因为这只是一种解决方法。我已经使用名为 AlphaFS 的第三方库实现了一项工作,它为我解决了这个问题,并且可能比开始一个单独的过程要好一些,但这是一个主观问题。我没有为自己的问题写答案的原因与我不会选择您的答案作为正确答案的原因相同。不过感谢您的努力。
猜你喜欢
  • 2018-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-23
  • 1970-01-01
  • 2013-06-16
相关资源
最近更新 更多