簡體   English   中英

獲取超過 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 等的信息。我能夠使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM