0

我正在尝试获取网络文件夹中某些文件和目录的安全信息。不幸的是,某些文件和目录路径分别超过了它们的字符限制 260/248。我发现了很多使用 Win32 P/Invoke、使用 .NET Framework 4.6.2 等的信息。我能够使用Kim Hamilton 的代码来遍历路径超过长度限制但我无法使用的每个文件和目录它以获取安全信息。

下面是我的简单 C# 代码,其中包含超过 260 个字符的路径。它将抛出路径太长异常。你能帮我在这种情况下解决它吗?

using System.IO;
using System.Security.AccessControl;

namespace Microsoft.Experimental.IO
{
    class Program
    {
        public static void Main(string[] args)
        {
            string path = @"\\Domain\UserData\VeryLongPath";  //This is above 260 characters
            DirectoryInfo info = new DirectoryInfo(path);
            DirectorySecurity security = Directory.GetAccessControl(path);

        }
    }
}
4

2 回答 2

1

尽管我检查了注册表项(现在似乎默认启用),但接受的答案对我来说并没有真正起作用。抛出的异常如上所述:无效名称,无效参数(SetAccessControl在我的情况下发生)。.NET 4.7.2

有帮助的是特殊语法:\\?\用于本地路径或\\?\UNC\网络共享。

因此,对于有问题的示例(服务器共享),它将如下所示:

var security = Directory.GetAccessControl($@"\\?\UNC\{path.TrimStart('\\')}");
于 2019-11-07T16:35:33.933 回答
0

我在其他一些帖子中看到安装 .NET Framework 4.6.2 确实有帮助。作为最后的手段,我尝试了它。我有 Visual Studio 2015。我安装了 .NET Framework 4.6.2。它仍然没有工作。然后我安装了Visual Studio 2017并选择了.NET Framework 4.6.2。它确实消除了路径太长异常。但它给出了一个名为 Invalid name, Invalid parameter 的新异常。

我的一位同事建议我检查注册表的值

Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem\LongPathsEnabled

它的原始值为0。我将它设置为1。路径太长和无效名称,无效参数异常都消失了。我相信没有 .NET Framework 4.6.2 的计算机中不存在此注册表项。

于 2018-04-06T00:26:08.493 回答