![](/img/trans.png)
[英]Windows 7 Path too long to create file above 260 Characters with .Net Framework 4.6.2
[英]Get Security Information of a too long file path above 260 characters: C#
我正在嘗試獲取網絡文件夾中某些文件和目錄的安全信息。 不幸的是,一些文件和目錄路徑分別超過了它們的字符限制 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);
}
}
}
盡管我檢查了注冊表項(現在似乎默認啟用了),但接受的答案對我來說並沒有真正起作用。 拋出的異常如前所述:無效名稱,無效參數(在我的情況下發生在SetAccessControl
上)。 .NET 4.7.2
特殊語法有什么幫助: \\\\?\\
用於本地路徑或\\\\?\\UNC\\
用於網絡共享。
因此,對於有問題的示例(服務器共享),它將類似於以下內容:
var security = Directory.GetAccessControl($@"\\?\UNC\{path.TrimStart('\\')}");
我在其他一些帖子中看到安裝 .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 的計算機中不存在此注冊表項。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.