获取超过 260 个字符的太长文件路径的安全信息:C#
Get Security Information of a too long file path above 260 characters: C#
我正在尝试获取网络文件夹中某些文件和目录的安全信息。不幸的是,一些文件和目录路径分别超过了它们的字符限制 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);
}
}
}
我在其他一些帖子中看到安装 .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了,Path Too Long和Invalid Name, Invalid parameter异常都没有了。我相信在没有 .NET Framework 4.6.2 的计算机中不存在此注册表项。
虽然我检查了注册表项(现在似乎默认启用),但接受的答案对我来说并没有真正起作用。抛出的异常如前所述:名称无效,参数无效(在我的例子中发生在 SetAccessControl
上)。 .NET 4.7.2
有用的是特殊语法:\?\
用于本地路径或 \?\UNC\
用于网络共享。
因此,对于所讨论的示例(服务器共享),它将如下所示:
var security = Directory.GetAccessControl($@"\?\UNC\{path.TrimStart('\')}");
我正在尝试获取网络文件夹中某些文件和目录的安全信息。不幸的是,一些文件和目录路径分别超过了它们的字符限制 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);
}
}
}
我在其他一些帖子中看到安装 .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了,Path Too Long和Invalid Name, Invalid parameter异常都没有了。我相信在没有 .NET Framework 4.6.2 的计算机中不存在此注册表项。
虽然我检查了注册表项(现在似乎默认启用),但接受的答案对我来说并没有真正起作用。抛出的异常如前所述:名称无效,参数无效(在我的例子中发生在 SetAccessControl
上)。 .NET 4.7.2
有用的是特殊语法:\?\
用于本地路径或 \?\UNC\
用于网络共享。
因此,对于所讨论的示例(服务器共享),它将如下所示:
var security = Directory.GetAccessControl($@"\?\UNC\{path.TrimStart('\')}");