我正在尝试获取网络文件夹中某些文件和目录的安全信息。不幸的是,一些文件和目录路径分别超过了它们的字符限制260/248。我找到了很多信息来使用Win32 P / Invoke,使用.NET Framework 4.6.2等。我能够使用a code by 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);
}
}
}
答案 0 :(得分:0)
我在其他一些帖子中看到安装.NET Framework 4.6.2确实有帮助。作为最后的手段,我试过了。我有Visual Studio 2015.我安装了.NET Framework 4.6.2。它仍然无法正常工作。然后我安装了 Visual Studio 2017 并选择了 .NET Framework 4.6.2 。它确实消除了Path Too Long Exception。但它给出了一个名为Invalid name,Invalid parameter的新异常。
我的一位同事建议我检查注册表的价值
Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem\LongPathsEnabled
它的原始值为0.我将其设置为1.并且Path Too Long和Invalid Name,Invalid参数异常都消失了。我相信在没有.NET Framework 4.6.2的计算机中不存在此注册表项。
答案 1 :(得分:0)
尽管我检查了注册表项(现在看来默认情况下已启用),但是接受的答案对我而言实际上并不起作用。引发的异常如上所述:无效的名称,无效的参数(在我的情况下,发生在SetAccessControl
上)。 .NET 4.7.2
特殊语法有帮助:\\?\
用于本地路径或\\?\UNC\
用于网络共享。
因此,对于所涉及的示例(服务器共享),将类似于以下内容:
var security = Directory.GetAccessControl($@"\\?\UNC\{path.TrimStart('\\')}");