C# Access to the path 'C:\Documents and Settings\' is denied

前端 未结 4 1719
灰色年华
灰色年华 2020-12-11 05:33

I\'m using a simple DirectoryInfo to grab all directories on the root on the C drive. However, I\'m running under administrator and i\'m getting the error of pa

相关标签:
4条回答
  • 2020-12-11 05:49

    If you are running as Administrator you might still run into

    • UAC being active. Fix by using "run as..."
    • Folders that you can only access when you explicitly take ownership.
    0 讨论(0)
  • 2020-12-11 05:54

    C:\Document and Settings is a junction point and additionnally You cannot access the System Volume Information directory.which is placed on C:\ root you have to trap any security exceptions and skip it to work your code.

    0 讨论(0)
  • 2020-12-11 06:09

    On newer versions of Windows C:\Document and Settings is a junction point, kind of a file system shortcut. It is not a normal directory, which means that it doesn't really work as a normal directory.

    If you type in C:\Document and Settings in the start->run box you will also get an access denied error, so it is nothing specific to your program.

    I'm a bit confused by how this works however. I thought that the junction point would be a transparent link to the new location which is c:\users but obviously not.

    Edit

    After looking at the duplicate question I'm less confused. The junction point really links to the new location which is c:\users. However, there is an explicit deny acl for reading on the junction point to prevent anyone from using it to read things:

    C:>cacls "Documents and Settings" C:\Documents and Settings Everyone:(DENY)(special access:)

                                   FILE_READ_DATA
    
                          Everyone:R
                          NT AUTHORITY\SYSTEM:F
                          BUILTIN\Administrators:F
    

    C:>

    0 讨论(0)
  • 2020-12-11 06:09
    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Security;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Solution
    {
        public class Program
        {
     static void Main(string[] args)
            {
                DirSearch(@"YOUR PATH");
                Console.ReadKey();
            }
    
            static void DirSearch(string dir)
            {
                try
                {
                    foreach (string f in Directory.GetFiles(dir))
                        Console.WriteLine(f);
                    foreach (string d in Directory.GetDirectories(dir))
                    {
                        Console.WriteLine(d);
                        DirSearch(d);
                    }
    
                }
                catch (System.Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }
        }
    }
    
    0 讨论(0)
提交回复
热议问题